main
ljy 6 months ago
parent bdfee2eecc
commit 4826cb6dce

3
.idea/.gitignore vendored

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
</module>

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/SunShine.iml" filepath="$PROJECT_DIR$/.idea/SunShine.iml" />
</modules>
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,3 @@
from django.apps import AppConfig

@ -0,0 +1,50 @@
# Generated by Django 5.0.3 on 2024-05-06 02:26
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='TravelInfo',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='id')),
('title', models.CharField(default='', max_length=255, verbose_name='景区名')),
('level', models.CharField(default='', max_length=255, verbose_name='等级')),
('discount', models.CharField(default='', max_length=255, verbose_name='折扣')),
('saleCount', models.CharField(default='', max_length=255, verbose_name='销量')),
('province', models.CharField(default='', max_length=255, verbose_name='省份')),
('star', models.CharField(default='', max_length=255, verbose_name='热度')),
('detailAddress', models.CharField(default='', max_length=255, verbose_name='景点详情地址')),
('shortIntro', models.CharField(default='', max_length=255, verbose_name='短评')),
('detailUrl', models.CharField(default='', max_length=255, verbose_name='详情地址')),
('score', models.CharField(default='', max_length=255, verbose_name='评分')),
('price', models.CharField(default='', max_length=255, verbose_name='价格')),
('commentsLen', models.CharField(default='', max_length=255, verbose_name='评论个数')),
('detailIntro', models.CharField(default='', max_length=2550, verbose_name='详情简介')),
('img_list', models.CharField(default='', max_length=2550, verbose_name='照片列表')),
('comments', models.TextField(default='', verbose_name='用户评论')),
('cover', models.CharField(default='', max_length=2550, verbose_name='封面')),
('createTime', models.DateField(auto_now_add=True, verbose_name='爬取时间')),
],
),
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='id')),
('username', models.CharField(default='', max_length=255, verbose_name='用户名')),
('password', models.CharField(default='', max_length=255, verbose_name='密码')),
('sex', models.CharField(default='', max_length=255, verbose_name='性别')),
('address', models.CharField(default='', max_length=255, verbose_name='地址')),
('avatar', models.FileField(default='', max_length=255, upload_to='', verbose_name='头像')),
('textarea', models.CharField(default='这个人很懒什么也没留下。', max_length=255, verbose_name='个人简介')),
('createTime', models.DateField(auto_now_add=True, verbose_name='创建时间')),
],
),
]

@ -0,0 +1,24 @@
# Generated by Django 5.0.3 on 2024-05-17 10:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('SS01', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='SaleTicketDetail',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='id')),
('title', models.CharField(default='', max_length=255, verbose_name='景区名')),
('day', models.CharField(default='', max_length=50, verbose_name='预约日期')),
('name', models.CharField(default='', max_length=50, verbose_name='姓名')),
('Idcard', models.CharField(default='', max_length=50, verbose_name='身份证号')),
('connection', models.CharField(default='', max_length=100, verbose_name='联系方式')),
],
),
]

@ -0,0 +1,18 @@
# Generated by Django 5.0.3 on 2024-06-01 06:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('SS01', '0002_saleticketdetail'),
]
operations = [
migrations.AddField(
model_name='user',
name='ZHlei',
field=models.CharField(default='', max_length=255, verbose_name='账户类型'),
),
]

@ -0,0 +1,45 @@
from django.db import models
# Create your models here.
class TravelInfo(models.Model):
id = models.AutoField('id',primary_key=True)
title = models.CharField('景区名',max_length=255,default='')
level = models.CharField('等级',max_length=255,default='')
discount = models.CharField('折扣', max_length=255, default='')
saleCount = models.CharField('销量', max_length=255, default='')
province = models.CharField('省份',max_length=255,default='')
star = models.CharField('热度', max_length=255, default='')
detailAddress = models.CharField('景点详情地址', max_length=255, default='')
shortIntro = models.CharField('短评', max_length=255, default='')
detailUrl = models.CharField('详情地址', max_length=255, default='')
score = models.CharField('评分', max_length=255, default='')
price = models.CharField('价格', max_length=255, default='')
commentsLen = models.CharField('评论个数', max_length=255, default='')
detailIntro = models.CharField('详情简介', max_length=2550, default='')
img_list = models.CharField('照片列表', max_length=2550, default='')
comments = models.TextField('用户评论', default='')
cover = models.CharField('封面', max_length=2550, default='')
createTime = models.DateField('爬取时间', auto_now_add=True)
class User(models.Model):
id = models.AutoField('id', primary_key=True)
username = models.CharField('用户名', max_length=255, default='')
password = models.CharField('密码', max_length=255, default='')
sex = models.CharField('性别', max_length=255, default='')
address = models.CharField('地址', max_length=255, default='')
avatar = models.FileField('头像', max_length=255, default='')
textarea = models.CharField('个人简介', max_length=255, default='这个人很懒什么也没留下。')
createTime = models.DateField('创建时间', auto_now_add=True)
ZHlei = models.CharField('账户类型', max_length=255, default='')
class SaleTicketDetail(models.Model):
id = models.AutoField('id', primary_key=True)
title = models.CharField('景区名', max_length=255, default='')
day = models.CharField('预约日期',max_length=50,default='')
name = models.CharField('姓名', max_length=50, default='')
Idcard = models.CharField('身份证号', max_length=50, default='')
connection = models.CharField('联系方式', max_length=100, default='')

@ -0,0 +1,130 @@
{% extends 'Mindex.html' %}
{% block title %}
购票页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>添加景点页面</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">管理中心</a></li>
<li class="breadcrumb-item active">添加景点页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">添加景点页面</h5>
<div class="activity">
<form action="{% url 'MAddJD' %}" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区名称:</label>
<div class="col-sm-10">
<input type="text" name="title" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景点等级:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="level" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区地点:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="province" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区评分:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="score" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">价格(元):</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="price" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">销量(元):</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="saleCount" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">详细地址:</label>
<div class="col-sm-10">
<textarea name="detailAddress" class="form-control" style="height: 100px;width:500px;" placeholder="请输入"></textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">简介:</label>
<div class="col-sm-10">
<textarea name="shortIntro" class="form-control" style="height: 100px;width:500px;" placeholder="请输入"></textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">详细介绍:</label>
<div class="col-sm-10">
<textarea name="detailIntro" class="form-control" style="height: 200px;width:800px;" placeholder="请输入"></textarea>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
<a href="{% url 'MaddressDetail' %}">
<button type="submit" class="btn btn-danger" style="float:right;width:200px;">景点详情页</button>
</a>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,79 @@
{% extends 'Mindex.html' %}
{% block title %}
修改密码页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>修改密码</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'Mindex' %}">管理员个人中心</a></li>
<li class="breadcrumb-item active">修改密码页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改管理员个人信息</h5>
<div class="activity">
<form action="{% url 'MGchangePassword' %}" method="POST">
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">初始密码:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="password" name="oldPassword" class="form-control" placeholder="请输入初始密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">新密码:</label>
<div class="col-sm-10">
<input type="password" name="newPassword" class="form-control" placeholder="请输入新密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">确认新密码:</label>
<div class="col-sm-10">
<input type="password" name="newPasswordConfirm" class="form-control" placeholder="请再次输入新密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,99 @@
{% extends 'Mindex.html' %}
{% block title %}
修改管理员信息页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>个人信息</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'index' %}">个人中心</a></li>
<li class="breadcrumb-item active">修改个人信息页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改信息</h5>
<div class="activity">
<form action="{% url 'MGchangeSelfInfo' %}" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">用户名:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="username" disabled value="{{ userInfo.username }}" class="form-control" style="width:200px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label" >性别:</label>
<div class="col-sm-10">
<select class="form-select" name="sex" aria-label="Default select example" style="width:200px" placeholder="请输入">
<option {% if userInfo.sex == '' %}
selected
{% endif %} value="男">男</option>
<option {% if userInfo.sex == '' %}
selected
{% endif %}value="女">女</option>
<option {% if userInfo.sex == '' %}
selected
{% endif %}value="保密">保密</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">地址:</label>
<div class="col-sm-10">
<input type="text" name="address" value="{{ userInfo.address }}" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">个人简介:</label>
<div class="col-sm-10">
<textarea name="textarea" class="form-control" placeholder="{{ userInfo.textarea }}" value="{{ userInfo.textarea }}" style="height: 100px;width:500px;" placeholder="请输入"></textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">编辑头像:</label>
<div class="col-sm-10">
<img style="width:100px;border:1px solid #ddd;padding:5px;" src="/media/{{ userInfo.avatar }}"><br>
<input type="file" name="avatar">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,87 @@
{% extends 'Mindex.html' %}
{% block title %}
景点管理页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>景点管理页</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">管理中心</a></li>
<li class="breadcrumb-item active">景点管理页</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">景点管理页</h5>
<div class="activity">
<div class="col-12">
<div class="card recent-sales overflow-auto">
<div class="card-body">
<table class="table table-borderless">
<thead>
<tr>
<th scope="col" style="width:300px;">景区名称</th>
<th scope="col">景点等级</th>
<th scope="col">景区地点</th>
<th scope="col">景点评分</th>
<th scope="col">价格</th>
<th scope="col">销量</th>
<th scope="col">操作</th>
</tr>
</thead>
<tbody>
{% for i in MaddressDetailData %}
<tr>
<td>{{ i.title }}</td>
<td>{{ i.level }}</td>
<td>{{ i.province }}</td>
<td>{{ i.score }}</td>
<td>{{ i.price }} 元</td>
<td>{{ i.saleCount }} 元</td>
<td>
<a href="MaddressFox/?nid={{ i.id }}"><button class="btn btn-primary">修改</button></a>
<a href="delete/?nid={{ i.id }}"><button class="btn btn-danger">删除</button></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,130 @@
{% extends 'Mindex.html' %}
{% block title %}
景点修改页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>景点管理页</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">管理中心</a></li>
<li class="breadcrumb-item active">景点修改页</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">景点修改页</h5>
<div class="activity">
<form action="" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区名称:</label>
<div class="col-sm-10">
<input type="text" name="title" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.title }}" value="{{ MaddressDetailData.title }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景点等级:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="level" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.level }}" value="{{ MaddressDetailData.level }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区地点:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="province" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.province }}" value="{{ MaddressDetailData.province }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区评分:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="score" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.score }}" value="{{ MaddressDetailData.score }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">价格(元):</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="price" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.price }}" value="{{ MaddressDetailData.price }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">销量(元):</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="saleCount" class="form-control" style="width:200px" placeholder="{{ MaddressDetailData.saleCount }}" value="{{ MaddressDetailData.saleCount }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">详细地址:</label>
<div class="col-sm-10">
<textarea name="detailAddress" class="form-control" style="height: 100px;width:500px;" placeholder="{{ MaddressDetailData.detailAddress }}" >{{ MaddressDetailData.detailAddress }}</textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">简介:</label>
<div class="col-sm-10">
<textarea name="shortIntro" class="form-control" style="height: 100px;width:500px;" placeholder="{{ MaddressDetailData.shortIntro }}" >{{ MaddressDetailData.shortIntro }}</textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">详细介绍:</label>
<div class="col-sm-10">
<textarea name="detailIntro" class="form-control" style="height: 200px;width:800px;" placeholder="{{ MaddressDetailData.detailIntro }}" >{{ MaddressDetailData.detailIntro }}</textarea>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
<a href="{% url 'MaddressDetail' %}">
<button type="submit" class="btn btn-danger" style="float:right;width:200px;">景点详情页</button>
</a>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,324 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>{% block title %}首页{% endblock %}</title>
<meta content="" name="description">
<meta content="" name="keywords">
<!-- Favicons -->
<link href="/static/img/favicon.png" rel="icon">
<link href="/static/img/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="/static/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="/static/vendor/quill/quill.snow.css" rel="stylesheet">
<link href="/static/vendor/quill/quill.bubble.css" rel="stylesheet">
<link href="/static/vendor/remixicon/remixicon.css" rel="stylesheet">
<link href="/static/vendor/simple-datatables/style.css" rel="stylesheet">
<link href="/static/css/style.css" rel="stylesheet">
</head>
<body>
<!-- ======= Header ======= -->
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="{% url 'Mindex' %}" class="logo d-flex align-items-center">
<img src="/static/img/logo.png" alt="">
<span class="d-none d-lg-block">ShineShe旅游系统</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<img src="/media/{{ userInfo.avatar }}" alt="Profile" class="rounded-circle"><!-- 修改头像 -->
<span class="d-none d-md-block dropdown-toggle ps-2">{{ userInfo.username }}</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6>{{ userInfo.username }}</h6>
<span>{{ userInfo.textarea }}</span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#">
<i class="bi bi-person"></i>
<span>个人简介</span>
</a>
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="{% url 'logOut' %}">
<i class="bi bi-box-arrow-right"></i>
<span>注销账户</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
<!-- ======= Sidebar ======= -->
{% block sidebar %}
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav" id="sidebar-nav">
<li class="nav-item">
<a class="nav-link " href="{% url 'Mindex' %}">
<span>首页</span>
</a>
</li>
<li class="nav-heading">管理员个人中心</li>
<li class="nav-item">
<a class="nav-link collapsed" href="{% url 'MGchangeSelfInfo' %}">
<span>修改信息</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link collapsed" href="{% url 'MGchangePassword' %}">
<span>修改密码</span>
</a>
</li>
<li class="nav-heading">管理中心</li>
<li class="nav-item">
<a class="nav-link collapsed" href="{% url 'MAddJD' %}">
<span>添加景点</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link collapsed" href="{% url 'MaddressDetail' %}">
<span>景点管理页</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link collapsed" href="{% url 'userDetail' %}">
<span>用户购票管理页</span>
</a>
</li>
</ul>
</aside>
{% endblock sidebar %}
<!-- End Sidebar-->
<main id="main" class="main">
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>首页</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'index' %}">首页</a></li>
<li class="breadcrumb-item active">首页</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div><!-- End Page Title -->
<section class="section dashboard">
<div class="row">
<div class="col-lg-8">
<div class="row">
<!-- 5A级景点的个数 -->
<div class="col-xxl-4 col-md-6">
<div class="card info-card sales-card">
<div class="card-body">
<h5 class="card-title">5A级景点的个数</h5>
<div class="d-flex align-items-center">
<div class="ps-3">
<h6>{{ A5Len }}</h6>
</div>
</div>
</div>
</div>
</div><!-- End Sales Card -->
<!-- 评论最多的景区 -->
<div class="col-xxl-4 col-md-6">
<div class="card info-card revenue-card">
<div class="card-body">
<h5 class="card-title">评论最多的景区</span></h5>
<div class="d-flex align-items-center">
<div class="ps-3">
<h6>{{ commentsLenTitle }}</h6>
</div>
</div>
</div>
</div>
</div><!-- End Revenue Card -->
<!-- 景点最多的地方 -->
<div class="col-xxl-4 col-xl-12">
<div class="card info-card customers-card">
<div class="card-body">
<h5 class="card-title">景点最多的地方</h5>
<div class="d-flex align-items-center">
<div class="ps-3">
<h6>{{ provienceDicSort }}</h6>
</div>
</div>
</div>
</div>
</div><!-- End Customers Card -->
<!-- 销量前十 -->
<div class="col-12">
<div class="card recent-sales overflow-auto">
<div class="card-body">
<h5 class="card-title">销量前十 <span>| 景点</span></h5>
<table class="table table-borderless">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">景区名称</th>
<th scope="col">景区等级</th>
<th scope="col">景区地点</th>
<th scope="col">景区评分</th>
<th scope="col">价格</th>
<th scope="col">月销量</th>
<th scope="col">图片</th>
</tr>
</thead>
<tbody>
{% for i in saleCountTop10 %}
<tr>
<th scope="row"><a href="#">{{ i.id }}</a></th>
<td>{{ i.title }}</td>
<td><a href="#" class="text-primary">{{ i.level }}</a></td>
<td><a href="#" class="text-dark">{{ i.province }}</a></td>
<td><span class="badge bg-success">{{ i.score }}分</span></td>
<td><span class="text-danger">{{ i.price }}</span></td>
<td><span class="text-primary">{{ i.saleCount }}</span></td>
<td>
<a href="{{ i.detailUrl }}"></a>
<a href="{% url 'saleTicket' %}"><img style="width:100%;height:120px;" src="{{ i.cover }}" /></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div><!-- End Recent Sales -->
</div>
</div><!-- End Left side columns -->
<!-- -->
<div class="col-lg-4">
<!-- start评分排名前十 -->
<div class="card">
<div class="card-body">
<h5 class="card-title">评分排名前十<span>| 景点</span></h5>
<div class="activity">
{% for travel in scoreTop10Data %}
<div class="activity-item d-flex" style="margin-bottom:5px;">
<a href="{% url 'saleTicket' %}">
<img style="width:120px;height:96.5px;object-fit:cover;margin-right:5px;" src="{{ travel.cover }}" alt="">
</a>
<div class="activite-label">
{{ travel.title }}
</div>
<i class='bi bi-circle-fill activity-badge text-danger align-self-start'></i>
<div class="activity-content">
{{ travel.detailAddress }} <a href="#" style="margin-left:5px;color:orange!important;" class="fw-bold text-dark">评分:{{ travel.score }}</a>
</div>
</div><!-- 运用一个循环显示10条数据 -->
{% endfor %}
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
</main><!-- End #main -->
<!-- ======= Footer ======= -->
<footer id="footer" class="footer">
<div class="copyright">
Shineshe旅游推荐系统
</div>
</footer><!-- End Footer -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<script src="/static/china.js"></script>
<script src="/static/echarts.min.js"></script>
{% block echarts%}
<script>
</script>
{% endblock %}
<script src="/static/vendor/apexcharts/apexcharts.min.js"></script>
<script src="/static/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="/static/vendor/chart.js/chart.min.js"></script>
<script src="/static/vendor/echarts/echarts.min.js"></script>
<script src="/static/vendor/quill/quill.min.js"></script>
<script src="/static/vendor/simple-datatables/simple-datatables.js"></script>
<script src="/static/vendor/tinymce/tinymce.min.js"></script>
<script src="/static/vendor/php-email-form/validate.js"></script>
<script src="/static/js/main.js"></script>
</body>
</html>

@ -0,0 +1,79 @@
{% extends 'base.html' %}
{% block title %}
修改密码页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>修改密码</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'index' %}">个人中心</a></li>
<li class="breadcrumb-item active">修改密码页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改个人信息</h5>
<div class="activity">
<form action="{% url 'changePassword' %}" method="POST">
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">初始密码:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="password" name="oldPassword" class="form-control" placeholder="请输入初始密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">新密码:</label>
<div class="col-sm-10">
<input type="password" name="newPassword" class="form-control" placeholder="请输入新密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">确认新密码:</label>
<div class="col-sm-10">
<input type="password" name="newPasswordConfirm" class="form-control" placeholder="请再次输入新密码" style="width:300px">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,99 @@
{% extends 'base.html' %}
{% block title %}
修改个人信息页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>个人信息</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'index' %}">个人中心</a></li>
<li class="breadcrumb-item active">修改个人信息页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改个人信息</h5>
<div class="activity">
<form action="{% url 'changeSelfInfo' %}" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">用户名:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="username" disabled value="{{ userInfo.username }}" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label" >性别:</label>
<div class="col-sm-10">
<select class="form-select" name="sex" aria-label="Default select example" style="width:200px">
<option {% if userInfo.sex == '' %}
selected
{% endif %} value="男">男</option>
<option {% if userInfo.sex == '' %}
selected
{% endif %}value="女">女</option>
<option {% if userInfo.sex == '' %}
selected
{% endif %}value="保密">保密</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">地址:</label>
<div class="col-sm-10">
<input type="text" name="address" value="{{ userInfo.address }}" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">个人简介:</label>
<div class="col-sm-10">
<textarea name="textarea" class="form-control" placeholder="{{ userInfo.textarea }}" value="{{ userInfo.textarea }}" style="height: 100px;width:500px;"></textarea>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">编辑头像:</label>
<div class="col-sm-10">
<img style="width:100px;border:1px solid #ddd;padding:5px;" src="/media/{{ userInfo.avatar }}"><br>
<input type="file" name="avatar">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1 @@
{% extends 'base.html' %}

@ -0,0 +1,99 @@
{% extends 'base.html' %}
{% block title %}
购票页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>购票页面</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">购票中心</a></li>
<li class="breadcrumb-item active">购票页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">购票页面</h5>
<div class="activity">
<form action="{% url 'saleTicket' %}" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区名:</label>
<div class="col-sm-10">
<input type="text" name="title" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">预约日期:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="date" name="cday" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">真实姓名:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="name" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">身份证号:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="idcard" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">联系方式:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="connection" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
<a href="{% url 'saleTicketInfo' %}">
<button type="submit" class="btn btn-danger" style="float:right;width:200px;">购票详情</button>
</a>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,85 @@
{% extends 'base.html' %}
{% block title %}
购票详情页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>购票详情页</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">购票中心</a></li>
<li class="breadcrumb-item active">购票详情页</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">购票详情页</h5>
<div class="activity">
<div class="col-12">
<div class="card recent-sales overflow-auto">
<div class="card-body">
<table class="table table-borderless">
<thead>
<tr>
<th scope="col">景区名称</th>
<th scope="col">预约时间</th>
<th scope="col">真实姓名</th>
<th scope="col">身份证号</th>
<th scope="col">联系方式</th>
<th scope="col">操作</th>
</tr>
</thead>
<tbody>
{% for i in saleTicketInfoData %}
<tr>
<td>{{ i.title }}</td>
<td>{{ i.day }}</td>
<td>{{ i.name }}</td>
<td>{{ i.Idcard }}</td>
<td>{{ i.connection }}</td>
<td>
<a href="ticketFox/?nid={{ i.id }}"><button class="btn btn-primary">修改</button></a>
<a href="delete/?nid={{ i.id }}"><button class="btn btn-danger">删除</button></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,85 @@
{% extends 'base.html' %}
{% block title %}
修改购票信息
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>修改页面</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">购票中心</a></li>
<li class="breadcrumb-item active">修改页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改页面</h5>
<div class="activity">
<form action="" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区名:</label>
<div class="col-sm-10">
<input type="text" name="titleFox" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">预约日期:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="date" name="cdayFox" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">联系方式:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="connectionFox" class="form-control" style="width:200px" placeholder="请输入">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
<a href="{% url 'saleTicketInfo' %}">
<button type="submit" class="btn btn-primary" style="float:right;width:200px;margin-left:10px">返回</button>
</a>
<a href="{% url 'saleTicketInfo' %}">
<button type="submit" class="btn btn-danger" style="float:right;width:200px;">购票详情</button>
</a>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,84 @@
{% extends 'Mindex.html' %}
{% block title %}
用户购票管理页面
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>用户购票管理页</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">管理中心</a></li>
<li class="breadcrumb-item active">用户购票管理页</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">用户详情页</h5>
<div class="activity">
<div class="col-12">
<div class="card recent-sales overflow-auto">
<div class="card-body">
<table class="table table-borderless">
<thead>
<tr>
<th scope="col">景区名称</th>
<th scope="col">预约时间</th>
<th scope="col">真实姓名</th>
<th scope="col">身份证号</th>
<th scope="col">联系方式</th>
<th scope="col">操作</th>
</tr>
</thead>
<tbody>
{% for i in userDetailData %}
<tr>
<td>{{ i.title }}</td>
<td>{{ i.day }}</td>
<td>{{ i.name }}</td>
<td>{{ i.Idcard }}</td>
<td>{{ i.connection }}</td>
<td>
<a href="userFox/?nid={{ i.id }}"><button class="btn btn-primary">修改</button></a>
<a href="delete/?nid={{ i.id }}"><button class="btn btn-danger">删除</button></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,100 @@
{% extends 'Mindex.html' %}
{% block title %}
修改用户购票信息
{% endblock %}
{% block content %}
<div class="pagetitle" style="display:flex;align-items:center">
<div style="margin-right:auto">
<h1>修改用户购票页面</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">管理中心</a></li>
<li class="breadcrumb-item active">修改页面</li>
</ol>
</nav>
</div>
<h5>
{{ nowTime.year}}-{{ nowTime.mon}}-{{ nowTime.day}}
</h5>
</div>
<section class="section dashboard">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">修改页面</h5>
<div class="activity">
<form action="" method="POST" enctype="multipart/form-data">
<div class="row mb-3">
<label class="col-sm-2 col-form-label">景区名:</label>
<div class="col-sm-10">
<input type="text" name="titleFox" class="form-control" style="width:200px" placeholder="{{ SaleTicketDetailw.title }}" value="{{ SaleTicketDetailw.title }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">预约日期:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="date" name="cdayFox" class="form-control" style="width:200px" placeholder="{{ SaleTicketDetailw.day }}" value="{{ SaleTicketDetailw.day }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">真实姓名:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="nameFox" class="form-control" style="width:200px" placeholder="{{ SaleTicketDetailw.name }}" value="{{ SaleTicketDetailw.name }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">身份证号:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="IDcardFox" class="form-control" style="width:200px" placeholder="{{ SaleTicketDetailw.Idcard }}" value="{{ SaleTicketDetailw.Idcard }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">联系方式:</label>
<div class="col-sm-10">
<!-- disabled默认值不能改变 -->
<input type="text" name="connectionFox" class="form-control" style="width:200px" placeholder="{{ SaleTicketDetailw.connection }}" value="{{ SaleTicketDetailw.connection }}">
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">确认</button>
</div>
</div>
</form>
<a href="{% url 'userDetail' %}">
<button type="submit" class="btn btn-primary" style="float:right;width:200px;margin-left:10px">返回</button>
</a>
<a href="{% url 'userDetail' %}">
<button type="submit" class="btn btn-danger" style="float:right;width:200px;">用户购票管理页面</button>
</a>
</div>
</div>
</div><!-- End 评分排名前十 -->
</div>
</div>
</section>
{% endblock %}
{% block echarts %}
<script>
</script>
{% endblock %}

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -1,15 +1,26 @@
from django.urls import path
from SS01 import views
urlpatterns = [
path('login/', views.login,name='login'),
path('register/', views.register,name='register'),
path('logOut/', views.logOut, name='logOut'),
path('index/', views.index, name='index'),
path('changeSelfInfo/', views.changeSelfInfo, name='changeSelfInfo'),
path('changePassword/', views.changePassword, name='changePassword'),
path('saleTicket/', views.saleTicket, name='saleTicket'),
path('saleTicketInfo/', views.saleTicketInfo, name='saleTicketInfo'),
path('saleTicketInfo/delete/', views.saleTicketInfo_delete),
path('saleTicketInfo/ticketFox/', views.ticketFox),
from django.urls import path
from SS01 import views
urlpatterns = [
path('login/', views.login,name='login'),
path('register/', views.register,name='register'),
path('logOut/', views.logOut, name='logOut'),
path('index/', views.index, name='index'),
path('changeSelfInfo/', views.changeSelfInfo, name='changeSelfInfo'),
path('changePassword/', views.changePassword, name='changePassword'),
path('saleTicket/', views.saleTicket, name='saleTicket'),
path('saleTicketInfo/', views.saleTicketInfo, name='saleTicketInfo'),
path('saleTicketInfo/delete/', views.saleTicketInfo_delete),
path('saleTicketInfo/ticketFox/', views.ticketFox),
path('Mindex/', views.Mindex, name='Mindex'),
path('MAddJD/', views.MAddJD, name='MAddJD'),
path('MaddressDetail/', views.MaddressDetail, name='MaddressDetail'),
path('MaddressDetail/MaddressFox/', views.MaddressFox),
path('MaddressDetail/delete/', views.MaddressDetail_delete),
path('userDetail/', views.userDetail,name='userDetail'),
path('userDetail/userFox/', views.userFox),
path('userDetail/delete/', views.userDetail_delete),
path('MGchangeSelfInfo/', views.MGchangeSelfInfo, name='MGchangeSelfInfo'),
path('MGchangePassword/', views.MGchangePassword, name='MGchangePassword'),
]

@ -0,0 +1,12 @@
from django.shortcuts import render,redirect
def errorResponse(request,errorMsg):
return render(request,'404.html',{
'errorMsg':errorMsg
})

@ -0,0 +1,27 @@
from SS01.models import User,SaleTicketDetail
def changeSelfInfo(username,formData,file):
user = User.objects.get(username=username)
user.address = formData['address']
user.sex = formData['sex']
if formData['textarea']:
user.textarea = formData['textarea']
if file.get('avatar') != None:
user.avatar = file.get('avatar')
user.save()
def getChangePassword(userInfo,passwordInfo):
oldPwd = passwordInfo['oldPassword']
newPwd = passwordInfo['newPassword']
newPwdConfirm = passwordInfo['newPasswordConfirm']
user = User.objects.get(username=userInfo.username)
if oldPwd != userInfo.password: return '初始密码错误'
if newPwd != newPwdConfirm: return '两次密码不一致'
user.password = newPwd
user.save()

@ -0,0 +1,68 @@
from SS01.utils import getPublicData
import random
import time
travelMapData = getPublicData.getAllTravelInfoMapData()
def getIndexTagData(): #获得数据库中的数据
A5Len = 0
commentsLenMax = 0
commentsLenTitle = ''
provienceDic = {}
for travel in travelMapData:
if travel.level == '5A景区':
A5Len += 1
if int(travel.commentsLen) > commentsLenMax:
commentsLenMax = int(travel.commentsLen)
commentsLenTitle = travel.title
if provienceDic.get(travel.province,-1) == -1:
provienceDic[travel.province] = 1
else:
provienceDic[travel.province] += 1
provienceDicSort = list(sorted(provienceDic.items(),key=lambda x:x[1],reverse=True))[0][0]
return A5Len,commentsLenTitle,provienceDicSort
def getAnthorData(): #获得数据库中评分数据
scoreTop10 = []
for travel in travelMapData:
if travel.score == '5':
scoreTop10.append(travel)
maxLen = len(scoreTop10)
scoreTop10Data = []
for i in range(10):
randomIndex = random.randint(0, maxLen - 1)
scoreTop10Data.append(scoreTop10[randomIndex])
saleCountTop10 = list(sorted(travelMapData,key=lambda x:int(x.saleCount),reverse=True))[:10]#对销量前十进行排序
return scoreTop10Data,saleCountTop10
def getNowTime(): #时间
timeFormat = time.localtime()
year = timeFormat.tm_year
mon = timeFormat.tm_mon
day = timeFormat.tm_mday
return year,mon,day
def getGeoData():
dataDic = {}
for i in travelMapData:
for j in getPublicData.cityList:
for city in j['city']:
if city.find(i.province) != -1:
if dataDic.get(j['province'],-1) == -1:
dataDic[j['province']] = 1
else:
dataDic[j['province']] += 1
resultData = []
for key,value in dataDic.items():
resultData.append({
'name':key,
'value':value,
})
return resultData

@ -0,0 +1,113 @@
from SS01.models import TravelInfo,User
import json
import time
monthList = ['January','February','March','April','May','June','July','August','September','October','November','December']
cityList = [
{'province': '北京', 'city': ['北京市']},
{'province': '天津', 'city': ['天津市']},
{'province': '河北',
'city': ['石家庄市', '唐山市', '秦皇岛市', '邯郸市', '邢台市', '保定市', '张家口市', '承德市', '沧州市', '廊坊市',
'衡水市']},
{'province': '山西',
'city': ['太原市', '大同市', '阳泉市', '长治市', '晋城市', '朔州市', '晋中市', '运城市', '忻州市', '临汾市',
'吕梁市']},
{'province': '内蒙古自治区',
'city': ['呼和浩特市', '包头市', '乌海市', '赤峰市', '通辽市', '鄂尔多斯市', '呼伦贝尔市', '巴彦淖尔市',
'乌兰察布市', '兴安盟', '锡林郭勒盟', '阿拉善盟']},
{'province': '辽宁',
'city': ['沈阳市', '大连市', '鞍山市', '抚顺市', '本溪市', '丹东市', '锦州市', '营口市', '阜新市', '辽阳市',
'盘锦市', '铁岭市', '朝阳市', '葫芦岛市']},
{'province': '吉林',
'city': ['长春市', '吉林市', '四平市', '辽源市', '通化市', '白山市', '松原市', '白城市', '延吉市']},
{'province': '黑龙江',
'city': ['哈尔滨市', '齐齐哈尔市', '鸡西市', '鹤岗市', '双鸭山市', '大庆市', '伊春市', '佳木斯市', '七台河市',
'牡丹江市', '黑河市', '绥化市',
'大兴安岭地区']},
{'province': '上海', 'city': ['上海市']},
{'province': '江苏',
'city': ['南京市', '无锡市', '徐州市', '常州市', '苏州市', '南通市', '连云港市', '淮安市', '盐城市', '扬州市',
'镇江市', '泰州市', '宿迁市']},
{'province': '浙江',
'city': ['杭州市', '宁波市', '温州市', '嘉兴市', '湖州市', '绍兴市', '金华市', '衢州市', '舟山市', '台州市',
'丽水市']},
{'province': '安徽',
'city': ['合肥市', '芜湖市', '蚌埠市', '淮南市', '马鞍山市', '淮北市', '铜陵市', '安庆市', '黄山市', '滁州市',
'阜阳市', '宿州市', '六安市', '亳州市',
'巢湖市', '池州市', '宣城市']},
{'province': '福建',
'city': ['福州市', '厦门市', '莆田市', '三明市', '泉州市', '漳州市', '南平市', '龙岩市', '宁德市']},
{'province': '江西',
'city': ['南昌市', '景德镇市', '萍乡市', '新余市', '九江市', '鹰潭市', '赣州市', '吉安市', '宜春市', '抚州市',
'上饶市']},
{'province': '山东',
'city': ['济南市', '青岛市', '淄博市', '枣庄市', '东营市', '烟台市', '潍坊市', '济宁市', '泰安市', '威海市',
'日照市', '莱芜市', '临沂市', '德州市',
'聊城市', '滨州市', '荷泽市']},
{'province': '河南',
'city': ['郑州市', '开封市', '洛阳市', '平顶山市', '安阳市', '鹤壁市', '新乡市', '焦作市', '济源市', '濮阳市',
'许昌市', '漯河市', '三门峡市', '南阳市',
'商丘市', '信阳市', '周口市', '驻马店市']},
{'province': '湖北',
'city': ['武汉市', '黄石市', '十堰市', '宜昌市', '襄阳市', '荆州市', '荆门市', '鄂州市', '孝感市', '黄冈市',
'咸宁市', '随州市', '恩施市', '仙桃市',
'天门市', '潜江市', '神农架林区']},
{'province': '湖南',
'city': ['长沙市', '株洲市', '湘潭市', '衡阳市', '邵阳市', '岳阳市', '常德市', '张家界市', '益阳市', '郴州市',
'永州市', '怀化市', '娄底市', '吉首市', '湘西']},
{'province': '广东',
'city': ['广州市', '韶关市', '深圳市', '珠海市', '汕头市', '佛山市', '江门市', '湛江市', '茂名市', '肇庆市',
'惠州市', '梅州市', '汕尾市', '河源市',
'阳江市', '清远市', '东莞市', '中山市', '东沙群岛', '潮州市', '揭阳市', '云浮市']},
{'province': '广西',
'city': ['南宁市', '柳州市', '桂林市', '梧州市', '北海市', '钦州市', '贵港市', '玉林市', '百色市', '贺州市',
'河池市', '来宾市', '崇左市', '防城港市']},
{'province': '海南',
'city': ['海口市', '三亚市', '三沙市', '五指山市', '琼海市', '儋州市', '文昌市', '万宁市', '东方市', '安定县',
'屯昌县', '澄迈县', '临高县', '白沙',
'昌江', '乐东', '陵水', '保亭', '琼中']},
{'province': '重庆', 'city': ['重庆市']},
{'province': '四川',
'city': ['成都市', '自贡市', '攀枝花市', '泸州市', '德阳市', '绵阳市', '广元市', '遂宁市', '内江市', '乐山市',
'南充市', '眉山市', '宜宾市', '广安市',
'达州市', '雅安市', '巴中市', '资阳市', '阿坝', '甘孜', '凉山', ]},
{'province': '贵州',
'city': ['贵阳市', '六盘水市', '遵义市', '安顺市', '铜仁市', '黔西南', '毕节市', '黔东南', '黔南']},
{'province': '云南',
'city': ['昆明市', '曲靖市', '玉溪市', '保山市', '昭通市', '丽江市', '普洱市', '临沧市', '楚雄', '文山',
'西双版纳', '大理', '德宏', '怒江', '迪庆']},
{'province': '西藏', 'city': ['拉萨市', '昌都地区', '山南地区', '日喀则地区', '那曲地区', '阿里地区', '林芝地区']},
{'province': '陕西',
'city': ['西安市', '铜川市', '宝鸡市', '咸阳市', '渭南市', '延安市', '汉中市', '榆林市', '安康市', '商洛市']},
{'province': '甘肃',
'city': ['兰州市', '嘉峪关市', '金昌市', '白银市', '天水市', '武威市', '张掖市', '平凉市', '酒泉市', '庆阳市',
'定西市', '陇南市', '临夏', '甘南']},
{'province': '青海', 'city': ['西宁市', '海乐市', '海北', '黄南', '海南', '果洛', '玉树', '海西']},
{'province': '宁夏', 'city': ['银川市', '石嘴山市', '吴忠市', '固原市', '中卫市', ]},
{'province': '新疆',
'city': ['乌鲁木齐市', '克拉玛依市', '吐鲁番地区', '哈密地区', '昌吉', '博尔塔拉', '巴音郭楞', '阿克苏地区',
'克孜勒苏柯尔克孜自治州', '喀什地区', '和田地区', '伊犁',
'塔城地区', '阿勒泰地区', '石河子市', '阿拉尔地区', '图木舒克市', '五家渠市', ]},
{'province': '台湾',
'city': ['台北市', '高雄市', '台南市', '台中市', '金门县', '南投县', '基隆市', '新竹市', '嘉义市', '新北市',
'宜兰县', '新竹县', '桃园县', '苗粟县',
'彰化县', '嘉义县', '云林县', '屏东县', '台东县', '花莲县', '澎湖县', '连江县']},
{'province': '香港', 'city': ['香港岛', '新界']},
{'province': '澳门', 'city': ['澳门', '离岛']},
]
def getAllTravelInfoMapData():
def map_fn(item):
item.img_list = json.loads(item.img_list) #直接用django中的模型
item.comments = json.loads(item.comments)
return item
travelList = TravelInfo.objects.all()
travelListMap = list(map(map_fn,travelList))
return travelListMap
def getAllUsersData():
return User.objects.all()

@ -0,0 +1,468 @@
from django.shortcuts import render,redirect
from SS01.models import User,TravelInfo,SaleTicketDetail
from django.http import HttpResponse
from SS01.utils import errorResponse,getPublicData,getIndexData,getChangeSelfInfo
# Create your views here.
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
username = request.POST.get('username')
password = request.POST.get('password')
cd = username
zhlei = request.POST.get('zhlei')
data = {cd:zhlei}
if zhlei == "普通用户":
try:
User.objects.get(username=username,password=password) #get查询如果未存在就执行except
request.session['username'] = username
return redirect('/SS01/index')
except:
return errorResponse.errorResponse(request,'账号或密码错误!') #utils中的模块调用errorMsg函数
else:
try:
User.objects.get(username=username, password=password) # get查询如果未存在就执行except
request.session['username'] = username
return redirect('/SS01/Mindex')
except:
return errorResponse.errorResponse(request, '账号或密码错误!') # utils中的模块调用errorMsg函数
def register(request):
if request.method == 'GET':
return render(request,'register.html')
else:
zhlei = request.POST.get('zhlei')
username = request.POST.get('username')
password = request.POST.get('password')
confirmPassword = request.POST.get('confirmPassword')
try:
User.objects.get(username=username) #get查询如果未存在就执行except创建用户
except:
if not username or not password or not confirmPassword or not zhlei:
return HttpResponse('不允许为空!')
if password != confirmPassword:
return HttpResponse('两次密码不一致!')
User.objects.create(username=username,password=password,ZHlei=zhlei)#创建一个用户
return redirect('/SS01/login')
return errorResponse.errorResponse(request,'该账号已存在')
def logOut(request):
request.session.clear()
return redirect('/SS01/login')
def index(request):
username = request.session.get('username') #在后台有一个username的值只有登录以后才会跳转到首页页面
userInfo = User.objects.get(username=username)
A5Len, commentsLenTitle, provienceDicSort = getIndexData.getIndexTagData()
scoreTop10Data,saleCountTop10 = getIndexData.getAnthorData()
year,mon,day = getIndexData.getNowTime()
geoData = getIndexData.getGeoData()
return render(request,'index.html',{
'userInfo': userInfo,
'A5Len':A5Len,
'commentsLenTitle': commentsLenTitle,
'provienceDicSort': provienceDicSort,
'scoreTop10Data':scoreTop10Data,
'nowTime':{
'year': year,
'mon': getPublicData.monthList[mon-1],
'day': day,
},
'geoData':geoData,
'saleCountTop10':saleCountTop10,
})
def changeSelfInfo(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
getChangeSelfInfo.changeSelfInfo(username,request.POST,request.FILES)
userInfo = User.objects.get(username=username)
return render(request, 'changeSelfInfo.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def changePassword(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
res = getChangeSelfInfo.getChangePassword(userInfo,request.POST)
if res != None:
return errorResponse.errorResponse(request,res)
return render(request, 'changePassword.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def saleTicket(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
title = request.POST.get('title')
cday = request.POST.get('cday')
name = request.POST.get('name')
idcard = request.POST.get('idcard')
connection = request.POST.get('connection')
if title == '':
return HttpResponse('景区名不能为空!请返回重新填写!')
if cday == '':
return HttpResponse('预约日期不能为空!请返回重新填写!')
if name == '':
return HttpResponse('您的姓名不能为空!请返回重新填写!')
if idcard == '':
return HttpResponse('身份证号不能为空!请返回重新填写!')
if connection == '':
return HttpResponse('联系方式不能为空!请返回重新填写!')
SaleTicketDetail.objects.create(
title=title,
day=cday,
name=name,
Idcard=idcard,
connection=connection,
) # 创建数据
return render(request, 'saleTicket.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def saleTicketInfo(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
saleTicketInfoData = SaleTicketDetail.objects.all()
year, mon, day = getIndexData.getNowTime()
return render(request, 'saleTicketInfo.html', {
'userInfo': userInfo,
'saleTicketInfoData':saleTicketInfoData,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def ticketFox(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
nid = request.GET.get('nid')
if request.method == 'POST':
titlefox = request.POST.get('titleFox')
cdayfox = request.POST.get('cdayFox')
connectionfox = request.POST.get('connectionFox')
if titlefox == '':
return HttpResponse('景区名不能为空!请返回重新填写!')
elif cdayfox == '':
return HttpResponse('预约时间不能为空!请返回重新填写!')
elif connectionfox == '':
return HttpResponse('联系方式不能为空!请返回重新填写!')
else:
SaleTicketDetail.objects.filter(id=nid).update(
title=titlefox,
day=cdayfox,
connection=connectionfox
)
return redirect("/SS01/saleTicketInfo/")
return render(request, 'ticketFox.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def saleTicketInfo_delete(request):
nid = request.GET.get('nid')
SaleTicketDetail.objects.filter(id=nid).delete()
return redirect('../')
def MGchangeSelfInfo(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
getChangeSelfInfo.changeSelfInfo(username,request.POST,request.FILES)
userInfo = User.objects.get(username=username)
return render(request, 'MGchangeSelfInfo.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def MGchangePassword(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
res = getChangeSelfInfo.getChangePassword(userInfo,request.POST)
if res != None:
return errorResponse.errorResponse(request,res)
return render(request, 'MGchangePassword.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def Mindex(request):
username = request.session.get('username') # 在后台有一个username的值只有登录以后才会跳转到首页页面
userInfo = User.objects.get(username=username)
A5Len, commentsLenTitle, provienceDicSort = getIndexData.getIndexTagData()
scoreTop10Data, saleCountTop10 = getIndexData.getAnthorData()
year, mon, day = getIndexData.getNowTime()
geoData = getIndexData.getGeoData()
return render(request, 'Mindex.html', {
'userInfo': userInfo,
'A5Len': A5Len,
'commentsLenTitle': commentsLenTitle,
'provienceDicSort': provienceDicSort,
'scoreTop10Data': scoreTop10Data,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
'geoData': geoData,
'saleCountTop10': saleCountTop10,
})
def MAddJD(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
if request.method == 'POST':
titlefox = request.POST.get('title')
levelfox = request.POST.get('level')
provincefox = request.POST.get('province')
scorefox = request.POST.get('score')
pricefox = request.POST.get('price')
saleCountfox = request.POST.get('saleCount')
detailAddressfox = request.POST.get('detailAddress')
shortIntrofox = request.POST.get('shortIntro')
detailIntrofox = request.POST.get('detailIntro')
if titlefox == '':
return HttpResponse('景区名称不能为空!请返回重新填写!')
elif levelfox == '':
return HttpResponse('景点等级不能为空!请返回重新填写!')
elif provincefox == '':
return HttpResponse('景区地点不能为空!请返回重新填写!')
elif scorefox == '':
return HttpResponse('景区评分不能为空!请返回重新填写!')
elif pricefox == '':
return HttpResponse('价格不能为空!请返回重新填写!')
elif saleCountfox == '':
return HttpResponse('销量不能为空!请返回重新填写!')
elif detailAddressfox == '':
return HttpResponse('详细地址不能为空!请返回重新填写!')
elif shortIntrofox == '':
return HttpResponse('简介不能为空!请返回重新填写!')
elif detailIntrofox == '':
return HttpResponse('详细介绍不能为空!请返回重新填写!')
else:
Mr = "www.baidu.com"
TravelInfo.objects.create(
title=titlefox,
level=levelfox,
discount=Mr,
saleCount=saleCountfox,
province=provincefox,
star=Mr,
detailAddress=detailAddressfox,
shortIntro=shortIntrofox,
detailUrl=Mr,
score=scorefox,
price=pricefox,
commentsLen=Mr,
detailIntro=detailIntrofox,
img_list=Mr,
comments=Mr,
cover=Mr,
) # 创建数据
return render(request, 'MAddJD.html', {
'userInfo': userInfo,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def MaddressDetail(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
MaddressDetailData = TravelInfo.objects.all()
year, mon, day = getIndexData.getNowTime()
return render(request, 'MaddressDetail.html', {
'userInfo': userInfo,
'MaddressDetailData':MaddressDetailData,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def MaddressFox(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
nid = request.GET.get('nid')
MaddressDetailData = TravelInfo.objects.get(id=nid)
if request.method == 'POST':
titlefox = request.POST.get('title')
levelfox = request.POST.get('level')
provincefox = request.POST.get('province')
scorefox = request.POST.get('score')
pricefox = request.POST.get('price')
saleCountfox = request.POST.get('saleCount')
detailAddressfox = request.POST.get('detailAddress')
shortIntrofox = request.POST.get('shortIntro')
detailIntrofox = request.POST.get('detailIntro')
if titlefox == '':
return HttpResponse('景区名称不能为空!请返回重新填写!')
elif levelfox == '':
return HttpResponse('景点等级不能为空!请返回重新填写!')
elif provincefox == '':
return HttpResponse('景区地点不能为空!请返回重新填写!')
elif scorefox == '':
return HttpResponse('景区评分不能为空!请返回重新填写!')
elif pricefox == '':
return HttpResponse('价格不能为空!请返回重新填写!')
elif saleCountfox == '':
return HttpResponse('销量不能为空!请返回重新填写!')
elif detailAddressfox == '':
return HttpResponse('详细地址不能为空!请返回重新填写!')
elif shortIntrofox == '':
return HttpResponse('简介不能为空!请返回重新填写!')
elif detailIntrofox == '':
return HttpResponse('详细介绍不能为空!请返回重新填写!')
else:
TravelInfo.objects.filter(id=nid).update(
title=titlefox,
level=levelfox,
saleCount=saleCountfox,
province=provincefox,
detailAddress=detailAddressfox,
shortIntro=shortIntrofox,
score=scorefox,
price=pricefox,
detailIntro=detailIntrofox,
)
return redirect("/SS01/MaddressDetail/")
return render(request, 'MaddressFox.html', {
'userInfo':userInfo,
'MaddressDetailData':MaddressDetailData,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def MaddressDetail_delete(request):
nid = request.GET.get('nid')
TravelInfo.objects.filter(id=nid).delete()
return redirect('../')
def userDetail(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
userDetailData = SaleTicketDetail.objects.all()
year, mon, day = getIndexData.getNowTime()
return render(request, 'userDetail.html', {
'userInfo': userInfo,
'userDetailData':userDetailData,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def userFox(request):
username = request.session.get('username')
userInfo = User.objects.get(username=username)
year, mon, day = getIndexData.getNowTime()
nid = request.GET.get('nid')
SaleTicketDetailw = SaleTicketDetail.objects.get(id=nid)
if request.method == 'POST':
titlefox = request.POST.get('titleFox')
cdayfox = request.POST.get('cdayFox')
cnameFox = request.POST.get('nameFox')
cIDcardFoxfox = request.POST.get('IDcardFox')
connectionfox = request.POST.get('connectionFox')
if titlefox == '':
return HttpResponse('景区名不能为空!请返回重新填写!')
elif cdayfox == '':
return HttpResponse('预约时间不能为空!请返回重新填写!')
elif cnameFox == '':
return HttpResponse('真实姓名不能为空!请返回重新填写!')
elif cIDcardFoxfox == '':
return HttpResponse('身份证号不能为空!请返回重新填写!')
elif connectionfox == '':
return HttpResponse('联系方式不能为空!请返回重新填写!')
else:
SaleTicketDetail.objects.filter(id=nid).update(
title=titlefox,
day=cdayfox,
connection=connectionfox,
name=cnameFox,
Idcard=cIDcardFoxfox,
)
return redirect("/SS01/userDetail/")
return render(request, 'userFox.html', {
'userInfo': userInfo,
'SaleTicketDetailw':SaleTicketDetailw,
'nowTime': {
'year': year,
'mon': getPublicData.monthList[mon - 1],
'day': day,
},
})
def userDetail_delete(request):
nid = request.GET.get('nid')
SaleTicketDetail.objects.filter(id=nid).delete()
return redirect('../')

@ -0,0 +1,4 @@
#很重要关系到数据库的连接
import pymysql
pymysql.version_info = (1,4,13,'final',0)
pymysql.install_as_MySQLdb()

@ -0,0 +1,16 @@
"""
ASGI config for SunShine project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SunShine.settings')
application = get_asgi_application()

@ -0,0 +1,142 @@
"""
Django settings for SunShine project.
Generated by 'django-admin startproject' using Django 5.0.3.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.0/ref/settings/
"""
from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-7^4%p89@01j+i*i6yefl0d#l*!pjy+)o1p97%gz*_rz*xr-1b%'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'SS01', #注册SS01
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middleware.userMiddleware.UserMiddleware',
]
ROOT_URLCONF = 'SunShine.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'SunShine.wsgi.application'
# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "SunShine", #数据库名字
"USER": "root",
"PASSWORD": "0000",
"HOST": "127.0.0.1", #本机
"PORT": "3306", #端口
}
}
# Password validation
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/5.0/topics/i18n/
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_LION = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

@ -0,0 +1,37 @@
"""
URL configuration for SunShine project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
from SS01 import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('SS01/', include('SS01.urls')),
path('', views.login,name='login'),
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

@ -0,0 +1,16 @@
"""
WSGI config for SunShine project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SunShine.settings')
application = get_wsgi_application()

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SunShine.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

@ -0,0 +1,20 @@
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render,redirect
class UserMiddleware(MiddlewareMixin):#django中有三个中间键
def process_request(self,request):
path = request.path_info
if path == '/SS01/login/' or path == '/SS01/register/':
return None
else:
if not request.session.get('username'):# 如果进入了/SS01/index这样的地址
return redirect('/SS01/login/')
else:
return None
def process_view(self,request,callback,callback_args,callback_kwargs):
pass
def process_response(self,request,response):
return response

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

@ -0,0 +1,319 @@
/**
* Template Name: NiceAdmin - v2.2.2
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/
(function() {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
if (all) {
select(el, all).forEach(e => e.addEventListener(type, listener))
} else {
select(el, all).addEventListener(type, listener)
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Sidebar toggle
*/
if (select('.toggle-sidebar-btn')) {
on('click', '.toggle-sidebar-btn', function(e) {
select('body').classList.toggle('toggle-sidebar')
})
}
/**
* Search bar toggle
*/
if (select('.search-bar-toggle')) {
on('click', '.search-bar-toggle', function(e) {
select('.search-bar').classList.toggle('search-bar-show')
})
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash) return
let section = select(navbarlink.hash)
if (!section) return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('#header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Back to top button
*/
let backtotop = select('.back-to-top')
if (backtotop) {
const toggleBacktotop = () => {
if (window.scrollY > 100) {
backtotop.classList.add('active')
} else {
backtotop.classList.remove('active')
}
}
window.addEventListener('load', toggleBacktotop)
onscroll(document, toggleBacktotop)
}
/**
* Initiate tooltips
*/
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
/**
* Initiate quill editors
*/
if (select('.quill-editor-default')) {
new Quill('.quill-editor-default', {
theme: 'snow'
});
}
if (select('.quill-editor-bubble')) {
new Quill('.quill-editor-bubble', {
theme: 'bubble'
});
}
if (select('.quill-editor-full')) {
new Quill(".quill-editor-full", {
modules: {
toolbar: [
[{
font: []
}, {
size: []
}],
["bold", "italic", "underline", "strike"],
[{
color: []
},
{
background: []
}
],
[{
script: "super"
},
{
script: "sub"
}
],
[{
list: "ordered"
},
{
list: "bullet"
},
{
indent: "-1"
},
{
indent: "+1"
}
],
["direction", {
align: []
}],
["link", "image", "video"],
["clean"]
]
},
theme: "snow"
});
}
/**
* Initiate TinyMCE Editor
*/
var useDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
tinymce.init({
selector: 'textarea.tinymce-editor',
plugins: 'print preview paste importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern noneditable help charmap quickbars emoticons',
imagetools_cors_hosts: ['picsum.photos'],
menubar: 'file edit view insert format tools table help',
toolbar: 'undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen preview save print | insertfile image media template link anchor codesample | ltr rtl',
toolbar_sticky: true,
autosave_ask_before_unload: true,
autosave_interval: '30s',
autosave_prefix: '{path}{query}-{id}-',
autosave_restore_when_empty: false,
autosave_retention: '2m',
image_advtab: true,
link_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_class_list: [{
title: 'None',
value: ''
},
{
title: 'Some class',
value: 'class-name'
}
],
importcss_append: true,
file_picker_callback: function(callback, value, meta) {
/* Provide file and text for the link dialog */
if (meta.filetype === 'file') {
callback('https://www.google.com/logos/google.jpg', {
text: 'My text'
});
}
/* Provide image and alt text for the image dialog */
if (meta.filetype === 'image') {
callback('https://www.google.com/logos/google.jpg', {
alt: 'My alt text'
});
}
/* Provide alternative source and posted for the media dialog */
if (meta.filetype === 'media') {
callback('movie.mp4', {
source2: 'alt.ogg',
poster: 'https://www.google.com/logos/google.jpg'
});
}
},
templates: [{
title: 'New Table',
description: 'creates a new table',
content: '<div class="mceTmpl"><table width="98%%" border="0" cellspacing="0" cellpadding="0"><tr><th scope="col"> </th><th scope="col"> </th></tr><tr><td> </td><td> </td></tr></table></div>'
},
{
title: 'Starting my story',
description: 'A cure for writers block',
content: 'Once upon a time...'
},
{
title: 'New list with dates',
description: 'New List with dates',
content: '<div class="mceTmpl"><span class="cdate">cdate</span><br /><span class="mdate">mdate</span><h2>My List</h2><ul><li></li><li></li></ul></div>'
}
],
template_cdate_format: '[Date Created (CDATE): %m/%d/%Y : %H:%M:%S]',
template_mdate_format: '[Date Modified (MDATE): %m/%d/%Y : %H:%M:%S]',
height: 600,
image_caption: true,
quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',
noneditable_noneditable_class: 'mceNonEditable',
toolbar_mode: 'sliding',
contextmenu: 'link image imagetools table',
skin: useDarkMode ? 'oxide-dark' : 'oxide',
content_css: useDarkMode ? 'dark' : 'default',
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }'
});
/**
* Initiate Bootstrap validation check
*/
var needsValidation = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(needsValidation)
.forEach(function(form) {
form.addEventListener('submit', function(event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
/**
* Initiate Datatables
*/
const datatables = select('.datatable', true)
datatables.forEach(datatable => {
new simpleDatatables.DataTable(datatable);
})
/**
* Autoresize echart charts
*/
const mainContainer = select('#main');
if (mainContainer) {
setTimeout(() => {
new ResizeObserver(function() {
select('.echart', true).forEach(getEchart => {
echarts.getInstanceByDom(getEchart).resize();
})
}).observe(mainContainer);
}, 200);
}
})();

File diff suppressed because one or more lines are too long

@ -0,0 +1,63 @@
{
"name": "ar",
"options": {
"months": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"shortMonths": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"days": [
"الأحد",
"الإثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"shortDays": [
"أحد",
"إثنين",
"ثلاثاء",
"أربعاء",
"خميس",
"جمعة",
"سبت"
],
"toolbar": {
"exportToSVG": "تحميل بصيغة SVG",
"exportToPNG": "تحميل بصيغة PNG",
"exportToCSV": "تحميل بصيغة CSV",
"menu": "القائمة",
"selection": "تحديد",
"selectionZoom": "تكبير التحديد",
"zoomIn": "تكبير",
"zoomOut": "تصغير",
"pan": "تحريك",
"reset": "إعادة التعيين"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ca",
"options": {
"months": [
"Gener",
"Febrer",
"Març",
"Abril",
"Maig",
"Juny",
"Juliol",
"Agost",
"Setembre",
"Octubre",
"Novembre",
"Desembre"
],
"shortMonths": [
"Gen.",
"Febr.",
"Març",
"Abr.",
"Maig",
"Juny",
"Jul.",
"Ag.",
"Set.",
"Oct.",
"Nov.",
"Des."
],
"days": [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte"
],
"shortDays": ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
"toolbar": {
"exportToSVG": "Descarregar SVG",
"exportToPNG": "Descarregar PNG",
"exportToCSV": "Descarregar CSV",
"menu": "Menú",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Augmentar",
"zoomOut": "Disminuir",
"pan": "Navegació",
"reset": "Reiniciar Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "cs",
"options": {
"months": [
"Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
],
"shortMonths": [
"Led",
"Úno",
"Bře",
"Dub",
"Kvě",
"Čvn",
"Čvc",
"Srp",
"Zář",
"Říj",
"Lis",
"Pro"
],
"days": [
"Neděle",
"Pondělí",
"Úterý",
"Středa",
"Čtvrtek",
"Pátek",
"Sobota"
],
"shortDays": ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
"toolbar": {
"exportToSVG": "Stáhnout SVG",
"exportToPNG": "Stáhnout PNG",
"exportToCSV": "Stáhnout CSV",
"menu": "Menu",
"selection": "Vybrat",
"selectionZoom": "Zoom: Vybrat",
"zoomIn": "Zoom: Přiblížit",
"zoomOut": "Zoom: Oddálit",
"pan": "Přesouvat",
"reset": "Resetovat"
}
}
}

@ -0,0 +1,55 @@
{
"name": "de",
"options": {
"months": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"shortMonths": [
"Jan",
"Feb",
"Mär",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez"
],
"days": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
],
"shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
"toolbar": {
"exportToSVG": "SVG speichern",
"exportToPNG": "PNG speichern",
"exportToCSV": "CSV speichern",
"menu": "Menü",
"selection": "Auswahl",
"selectionZoom": "Auswahl vergrößern",
"zoomIn": "Vergrößern",
"zoomOut": "Verkleinern",
"pan": "Verschieben",
"reset": "Zoom zurücksetzen"
}
}
}

@ -0,0 +1,55 @@
{
"name": "el",
"options": {
"months": [
"Ιανουάριος",
"Φεβρουάριος",
"Μάρτιος",
"Απρίλιος",
"Μάιος",
"Ιούνιος",
"Ιούλιος",
"Αύγουστος",
"Σεπτέμβριος",
"Οκτώβριος",
"Νοέμβριος",
"Δεκέμβριος"
],
"shortMonths": [
"Ιαν",
"Φευ",
"Μαρ",
"Απρ",
"Μάι",
"Ιουν",
"Ιουλ",
"Αυγ",
"Σεπ",
"Οκτ",
"Νοε",
"Δεκ"
],
"days": [
"Κυριακή",
"Δευτέρα",
"Τρίτη",
"Τετάρτη",
"Πέμπτη",
"Παρασκευή",
"Σάββατο"
],
"shortDays": ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
"toolbar": {
"exportToSVG": "Λήψη SVG",
"exportToPNG": "Λήψη PNG",
"exportToCSV": "Λήψη CSV",
"menu": "Menu",
"selection": "Επιλογή",
"selectionZoom": "Μεγένθυση βάση επιλογής",
"zoomIn": "Μεγένθυνση",
"zoomOut": "Σμίκρυνση",
"pan": "Μετατόπιση",
"reset": "Επαναφορά μεγένθυνσης"
}
}
}

@ -0,0 +1,55 @@
{
"name": "en",
"options": {
"months": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
],
"days": [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Selection",
"selectionZoom": "Selection Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Panning",
"reset": "Reset Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "es",
"options": {
"months": [
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
"shortMonths": [
"Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic"
],
"days": [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado"
],
"shortDays": ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
"toolbar": {
"exportToSVG": "Descargar SVG",
"exportToPNG": "Descargar PNG",
"exportToCSV": "Descargar CSV",
"menu": "Menu",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Aumentar",
"zoomOut": "Disminuir",
"pan": "Navegación",
"reset": "Reiniciar Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "fa",
"options": {
"months": [
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن",
"اسفند"
],
"shortMonths": [
"فرو",
"ارد",
"خرد",
"تیر",
"مرد",
"شهر",
"مهر",
"آبا",
"آذر",
"دی",
"بهمـ",
"اسفـ"
],
"days": [
"یکشنبه",
"دوشنبه",
"سه شنبه",
"چهارشنبه",
"پنجشنبه",
"جمعه",
"شنبه"
],
"shortDays": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
"toolbar": {
"exportToSVG": "دانلود SVG",
"exportToPNG": "دانلود PNG",
"exportToCSV": "دانلود CSV",
"menu": "منو",
"selection": "انتخاب",
"selectionZoom": "بزرگنمایی انتخابی",
"zoomIn": "بزرگنمایی",
"zoomOut": "کوچکنمایی",
"pan": "پیمایش",
"reset": "بازنشانی بزرگنمایی"
}
}
}

@ -0,0 +1,55 @@
{
"name": "fi",
"options": {
"months": [
"Tammikuu",
"Helmikuu",
"Maaliskuu",
"Huhtikuu",
"Toukokuu",
"Kesäkuu",
"Heinäkuu",
"Elokuu",
"Syyskuu",
"Lokakuu",
"Marraskuu",
"Joulukuu"
],
"shortMonths": [
"Tammi",
"Helmi",
"Maalis",
"Huhti",
"Touko",
"Kesä",
"Heinä",
"Elo",
"Syys",
"Loka",
"Marras",
"Joulu"
],
"days": [
"Sunnuntai",
"Maanantai",
"Tiistai",
"Keskiviikko",
"Torstai",
"Perjantai",
"Lauantai"
],
"shortDays": ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
"toolbar": {
"exportToSVG": "Lataa SVG",
"exportToPNG": "Lataa PNG",
"exportToCSV": "Lataa CSV",
"menu": "Valikko",
"selection": "Valinta",
"selectionZoom": "Valinnan zoomaus",
"zoomIn": "Lähennä",
"zoomOut": "Loitonna",
"pan": "Panoroi",
"reset": "Nollaa zoomaus"
}
}
}

@ -0,0 +1,55 @@
{
"name": "fr",
"options": {
"months": [
"janvier",
"février",
"mars",
"avril",
"mai",
"juin",
"juillet",
"août",
"septembre",
"octobre",
"novembre",
"décembre"
],
"shortMonths": [
"janv.",
"févr.",
"mars",
"avr.",
"mai",
"juin",
"juill.",
"août",
"sept.",
"oct.",
"nov.",
"déc."
],
"days": [
"dimanche",
"lundi",
"mardi",
"mercredi",
"jeudi",
"vendredi",
"samedi"
],
"shortDays": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
"toolbar": {
"exportToSVG": "Télécharger au format SVG",
"exportToPNG": "Télécharger au format PNG",
"exportToCSV": "Télécharger au format CSV",
"menu": "Menu",
"selection": "Sélection",
"selectionZoom": "Sélection et zoom",
"zoomIn": "Zoomer",
"zoomOut": "Dézoomer",
"pan": "Navigation",
"reset": "Réinitialiser le zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "he",
"options": {
"months": [
"ינואר",
"פברואר",
"מרץ",
"אפריל",
"מאי",
"יוני",
"יולי",
"אוגוסט",
"ספטמבר",
"אוקטובר",
"נובמבר",
"דצמבר"
],
"shortMonths": [
"ינו׳",
"פבר׳",
"מרץ",
"אפר׳",
"מאי",
"יוני",
"יולי",
"אוג׳",
"ספט׳",
"אוק׳",
"נוב׳",
"דצמ׳"
],
"days": [
"ראשון",
"שני",
"שלישי",
"רביעי",
"חמישי",
"שישי",
"שבת"
],
"shortDays": ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
"toolbar": {
"exportToSVG": "הורד SVG",
"exportToPNG": "הורד PNG",
"exportToCSV": "הורד CSV",
"menu": "תפריט",
"selection": "בחירה",
"selectionZoom": "זום בחירה",
"zoomIn": "הגדלה",
"zoomOut": "הקטנה",
"pan": "הזזה",
"reset": "איפוס תצוגה"
}
}
}

@ -0,0 +1,55 @@
{
"name": "hi",
"options": {
"months": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"shortMonths": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"days": [
"रविवार",
"सोमवार",
"मंगलवार",
"बुधवार",
"गुरुवार",
"शुक्रवार",
"शनिवार"
],
"shortDays": ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
"toolbar": {
"exportToSVG": "निर्यात SVG",
"exportToPNG": "निर्यात PNG",
"exportToCSV": "निर्यात CSV",
"menu": "सूची",
"selection": "चयन",
"selectionZoom": "ज़ूम करना",
"zoomIn": "ज़ूम इन",
"zoomOut": "ज़ूम आउट",
"pan": "पैनिंग",
"reset": "फिर से कायम करना"
}
}
}

@ -0,0 +1,55 @@
{
"name": "hr",
"options": {
"months": [
"Siječanj",
"Veljača",
"Ožujak",
"Travanj",
"Svibanj",
"Lipanj",
"Srpanj",
"Kolovoz",
"Rujan",
"Listopad",
"Studeni",
"Prosinac"
],
"shortMonths": [
"Sij",
"Velj",
"Ožu",
"Tra",
"Svi",
"Lip",
"Srp",
"Kol",
"Ruj",
"Lis",
"Stu",
"Pro"
],
"days": [
"Nedjelja",
"Ponedjeljak",
"Utorak",
"Srijeda",
"Četvrtak",
"Petak",
"Subota"
],
"shortDays": ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
"toolbar": {
"exportToSVG": "Preuzmi SVG",
"exportToPNG": "Preuzmi PNG",
"exportToCSV": "Preuzmi CSV",
"menu": "Izbornik",
"selection": "Odabir",
"selectionZoom": "Odabirno povećanje",
"zoomIn": "Uvećajte prikaz",
"zoomOut": "Umanjite prikaz",
"pan": "Pomicanje",
"reset": "Povratak na zadani prikaz"
}
}
}

@ -0,0 +1,64 @@
{
"name": "hu",
"options": {
"months": [
"január",
"február",
"március",
"április",
"május",
"június",
"július",
"augusztus",
"szeptember",
"október",
"november",
"december"
],
"shortMonths": [
"jan",
"feb",
"mar",
"ápr",
"máj",
"jún",
"júl",
"aug",
"szept",
"okt",
"nov",
"dec"
],
"days": [
"hétfő",
"kedd",
"szerda",
"csütörtök",
"péntek",
"szombat",
"vasárnap"
],
"shortDays": [
"H",
"K",
"Sze",
"Cs",
"P",
"Szo",
"V"
],
"toolbar": {
"exportToSVG": "Exportálás SVG-be",
"exportToPNG": "Exportálás PNG-be",
"exportToCSV": "Exportálás CSV-be",
"menu": "Fő ajánlat",
"download": "SVG letöltése",
"selection": "Kiválasztás",
"selectionZoom": "Nagyító kiválasztása",
"zoomIn": "Nagyítás",
"zoomOut": "Kicsinyítés",
"pan": "Képcsúsztatás",
"reset": "Nagyító visszaállítása"
}
}
}

@ -0,0 +1,55 @@
{
"name": "hy",
"options": {
"months": [
"Հունվար",
"Փետրվար",
"Մարտ",
"Ապրիլ",
"Մայիս",
"Հունիս",
"Հուլիս",
"Օգոստոս",
"Սեպտեմբեր",
"Հոկտեմբեր",
"Նոյեմբեր",
"Դեկտեմբեր"
],
"shortMonths": [
"Հնվ",
"Փտվ",
"Մրտ",
"Ապր",
"Մյս",
"Հնս",
"Հլիս",
"Օգս",
"Սեպ",
"Հոկ",
"Նոյ",
"Դեկ"
],
"days": [
"Կիրակի",
"Երկուշաբթի",
"Երեքշաբթի",
"Չորեքշաբթի",
"Հինգշաբթի",
"Ուրբաթ",
"Շաբաթ"
],
"shortDays": ["Կիր", "Երկ", "Երք", "Չրք", "Հնգ", "Ուրբ", "Շբթ"],
"toolbar": {
"exportToSVG": "Բեռնել SVG",
"exportToPNG": "Բեռնել PNG",
"exportToCSV": "Բեռնել CSV",
"menu": "Մենյու",
"selection": "Ընտրված",
"selectionZoom": "Ընտրված հատվածի խոշորացում",
"zoomIn": "Խոշորացնել",
"zoomOut": "Մանրացնել",
"pan": "Տեղափոխում",
"reset": "Բերել սկզբնական վիճակի"
}
}
}

@ -0,0 +1,47 @@
{
"name": "id",
"options": {
"months": [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Mei",
"Jun",
"Jul",
"Agu",
"Sep",
"Okt",
"Nov",
"Des"
],
"days": ["Minggu", "Senin", "Selasa", "Rabu", "kamis", "Jumat", "Sabtu"],
"shortDays": ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
"toolbar": {
"exportToSVG": "Unduh SVG",
"exportToPNG": "Unduh PNG",
"exportToCSV": "Unduh CSV",
"menu": "Menu",
"selection": "Pilihan",
"selectionZoom": "Perbesar Pilihan",
"zoomIn": "Perbesar",
"zoomOut": "Perkecil",
"pan": "Geser",
"reset": "Atur Ulang Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "it",
"options": {
"months": [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
],
"shortMonths": [
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
],
"days": [
"Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato"
],
"shortDays": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
"toolbar": {
"exportToSVG": "Scarica SVG",
"exportToPNG": "Scarica PNG",
"exportToCSV": "Scarica CSV",
"menu": "Menu",
"selection": "Selezione",
"selectionZoom": "Seleziona Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Sposta",
"reset": "Reimposta Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ja",
"options": {
"months": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"shortMonths": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"days": [
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
],
"shortDays": ["日", "月", "火", "水", "木", "金", "土"],
"toolbar": {
"exportToSVG": "SVGダウンロード",
"exportToPNG": "PNGダウンロード",
"exportToCSV": "CSVダウンロード",
"menu": "メニュー",
"selection": "選択",
"selectionZoom": "選択ズーム",
"zoomIn": "拡大",
"zoomOut": "縮小",
"pan": "パン",
"reset": "ズームリセット"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ka",
"options": {
"months": [
"იანვარი",
"თებერვალი",
"მარტი",
"აპრილი",
"მაისი",
"ივნისი",
"ივლისი",
"აგვისტო",
"სექტემბერი",
"ოქტომბერი",
"ნოემბერი",
"დეკემბერი"
],
"shortMonths": [
"იან",
"თებ",
"მარ",
"აპრ",
"მაი",
"ივნ",
"ივლ",
"აგვ",
"სექ",
"ოქტ",
"ნოე",
"დეკ"
],
"days": [
"კვირა",
"ორშაბათი",
"სამშაბათი",
"ოთხშაბათი",
"ხუთშაბათი",
"პარასკევი",
"შაბათი"
],
"shortDays": ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
"toolbar": {
"exportToSVG": "გადმოქაჩე SVG",
"exportToPNG": "გადმოქაჩე PNG",
"exportToCSV": "გადმოქაჩე CSV",
"menu": "მენიუ",
"selection": "არჩევა",
"selectionZoom": "არჩეულის გადიდება",
"zoomIn": "გადიდება",
"zoomOut": "დაპატარაება",
"pan": "გადაჩოჩება",
"reset": "გადიდების გაუქმება"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ko",
"options": {
"months": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"shortMonths": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"days": [
"일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일"
],
"shortDays": ["일", "월", "화", "수", "목", "금", "토"],
"toolbar": {
"exportToSVG": "SVG 다운로드",
"exportToPNG": "PNG 다운로드",
"exportToCSV": "CSV 다운로드",
"menu": "메뉴",
"selection": "선택",
"selectionZoom": "선택영역 확대",
"zoomIn": "확대",
"zoomOut": "축소",
"pan": "패닝",
"reset": "원래대로"
}
}
}

@ -0,0 +1,55 @@
{
"name": "lt",
"options": {
"months": [
"Sausis",
"Vasaris",
"Kovas",
"Balandis",
"Gegužė",
"Birželis",
"Liepa",
"Rugpjūtis",
"Rugsėjis",
"Spalis",
"Lapkritis",
"Gruodis"
],
"shortMonths": [
"Sau",
"Vas",
"Kov",
"Bal",
"Geg",
"Bir",
"Lie",
"Rgp",
"Rgs",
"Spl",
"Lap",
"Grd"
],
"days": [
"Sekmadienis",
"Pirmadienis",
"Antradienis",
"Trečiadienis",
"Ketvirtadienis",
"Penktadienis",
"Šeštadienis"
],
"shortDays": ["Sk", "Per", "An", "Tr", "Kt", "Pn", "Št"],
"toolbar": {
"exportToSVG": "Atsisiųsti SVG",
"exportToPNG": "Atsisiųsti PNG",
"exportToCSV": "Atsisiųsti CSV",
"menu": "Menu",
"selection": "Pasirinkimas",
"selectionZoom": "Zoom: Pasirinkimas",
"zoomIn": "Zoom: Priartinti",
"zoomOut": "Zoom: Atitolinti",
"pan": "Perkėlimas",
"reset": "Atstatyti"
}
}
}

@ -0,0 +1,55 @@
{
"name": "nb",
"options": {
"months": [
"Januar",
"Februar",
"Mars",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Desember"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Des"
],
"days": [
"Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag"
],
"shortDays": ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
"toolbar": {
"exportToSVG": "Last ned SVG",
"exportToPNG": "Last ned PNG",
"exportToCSV": "Last ned CSV",
"menu": "Menu",
"selection": "Velg",
"selectionZoom": "Zoom: Velg",
"zoomIn": "Zoome inn",
"zoomOut": "Zoome ut",
"pan": "Skyving",
"reset": "Start på nytt"
}
}
}

@ -0,0 +1,55 @@
{
"name": "nl",
"options": {
"months": [
"Januari",
"Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mrt",
"Apr",
"Mei",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Zondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrijdag",
"Zaterdag"
],
"shortDays": ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Selectie",
"selectionZoom": "Zoom selectie",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out",
"pan": "Verplaatsen",
"reset": "Standaardwaarden"
}
}
}

@ -0,0 +1,55 @@
{
"name": "pl",
"options": {
"months": [
"Styczeń",
"Luty",
"Marzec",
"Kwiecień",
"Maj",
"Czerwiec",
"Lipiec",
"Sierpień",
"Wrzesień",
"Październik",
"Listopad",
"Grudzień"
],
"shortMonths": [
"Sty",
"Lut",
"Mar",
"Kwi",
"Maj",
"Cze",
"Lip",
"Sie",
"Wrz",
"Paź",
"Lis",
"Gru"
],
"days": [
"Niedziela",
"Poniedziałek",
"Wtorek",
"Środa",
"Czwartek",
"Piątek",
"Sobota"
],
"shortDays": ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "Sb"],
"toolbar": {
"exportToSVG": "Pobierz SVG",
"exportToPNG": "Pobierz PNG",
"exportToCSV": "Pobierz CSV",
"menu": "Menu",
"selection": "Wybieranie",
"selectionZoom": "Zoom: Wybieranie",
"zoomIn": "Zoom: Przybliż",
"zoomOut": "Zoom: Oddal",
"pan": "Przesuwanie",
"reset": "Resetuj"
}
}
}

@ -0,0 +1,55 @@
{
"name": "pt-br",
"options": {
"months": [
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"shortMonths": [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez"
],
"days": [
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado"
],
"shortDays": ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"],
"toolbar": {
"exportToSVG": "Baixar SVG",
"exportToPNG": "Baixar PNG",
"exportToCSV": "Baixar CSV",
"menu": "Menu",
"selection": "Selecionar",
"selectionZoom": "Selecionar Zoom",
"zoomIn": "Aumentar",
"zoomOut": "Diminuir",
"pan": "Navegação",
"reset": "Reiniciar Zoom"
}
}
}

@ -0,0 +1,55 @@
{
"name": "pt",
"options": {
"months": [
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"shortMonths": [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ag",
"Set",
"Out",
"Nov",
"Dez"
],
"days": [
"Domingo",
"Segunda-feira",
"Terça-feira",
"Quarta-feira",
"Quinta-feira",
"Sexta-feira",
"Sábado"
],
"shortDays": ["Do", "Se", "Te", "Qa", "Qi", "Sx", "Sa"],
"toolbar": {
"exportToSVG": "Baixar SVG",
"exportToPNG": "Baixar PNG",
"exportToCSV": "Baixar CSV",
"menu": "Menu",
"selection": "Selecionar",
"selectionZoom": "Zoom: Selecionar",
"zoomIn": "Zoom: Aumentar",
"zoomOut": "Zoom: Diminuir",
"pan": "Deslocamento",
"reset": "Redefinir"
}
}
}

@ -0,0 +1,55 @@
{
"name": "rs",
"options": {
"months": [
"Januar",
"Februar",
"Mart",
"April",
"Maj",
"Jun",
"Jul",
"Avgust",
"Septembar",
"Oktobar",
"Novembar",
"Decembar"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedelja",
"Ponedeljak",
"Utorak",
"Sreda",
"Četvrtak",
"Petak",
"Subota"
],
"shortDays": ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
"toolbar": {
"exportToSVG": "Preuzmi SVG",
"exportToPNG": "Preuzmi PNG",
"exportToCSV": "Preuzmi CSV",
"menu": "Meni",
"selection": "Odabir",
"selectionZoom": "Odabirno povećanje",
"zoomIn": "Uvećajte prikaz",
"zoomOut": "Umanjite prikaz",
"pan": "Pomeranje",
"reset": "Resetuj prikaz"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ru",
"options": {
"months": [
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь"
],
"shortMonths": [
"Янв",
"Фев",
"Мар",
"Апр",
"Май",
"Июн",
"Июл",
"Авг",
"Сен",
"Окт",
"Ноя",
"Дек"
],
"days": [
"Воскресенье",
"Понедельник",
"Вторник",
"Среда",
"Четверг",
"Пятница",
"Суббота"
],
"shortDays": ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
"toolbar": {
"exportToSVG": "Сохранить SVG",
"exportToPNG": "Сохранить PNG",
"exportToCSV": "Сохранить CSV",
"menu": "Меню",
"selection": "Выбор",
"selectionZoom": "Выбор с увеличением",
"zoomIn": "Увеличить",
"zoomOut": "Уменьшить",
"pan": "Перемещение",
"reset": "Сбросить увеличение"
}
}
}

@ -0,0 +1,55 @@
{
"name": "se",
"options": {
"months": [
"Januari",
"Februari",
"Mars",
"April",
"Maj",
"Juni",
"Juli",
"Augusti",
"September",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Juni",
"Juli",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Söndag",
"Måndag",
"Tisdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lördag"
],
"shortDays": ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
"toolbar": {
"exportToSVG": "Ladda SVG",
"exportToPNG": "Ladda PNG",
"exportToCSV": "Ladda CSV",
"menu": "Meny",
"selection": "Selektion",
"selectionZoom": "Val av zoom",
"zoomIn": "Zooma in",
"zoomOut": "Zooma ut",
"pan": "Panorering",
"reset": "Återställ zoomning"
}
}
}

@ -0,0 +1,55 @@
{
"name": "sk",
"options": {
"months": [
"Január",
"Február",
"Marec",
"Apríl",
"Máj",
"Jún",
"Júl",
"August",
"September",
"Október",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Máj",
"Jún",
"Júl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedeľa",
"Pondelok",
"Utorok",
"Streda",
"Štvrtok",
"Piatok",
"Sobota"
],
"shortDays": ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"],
"toolbar": {
"exportToSVG": "Stiahnuť SVG",
"exportToPNG": "Stiahnuť PNG",
"exportToCSV": "Stiahnuť CSV",
"menu": "Menu",
"selection": "Vyberanie",
"selectionZoom": "Zoom: Vyberanie",
"zoomIn": "Zoom: Priblížiť",
"zoomOut": "Zoom: Vzdialiť",
"pan": "Presúvanie",
"reset": "Resetovať"
}
}
}

@ -0,0 +1,55 @@
{
"name": "sl",
"options": {
"months": [
"Januar",
"Februar",
"Marec",
"April",
"Maj",
"Junij",
"Julij",
"Avgust",
"Septemer",
"Oktober",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec"
],
"days": [
"Nedelja",
"Ponedeljek",
"Torek",
"Sreda",
"Četrtek",
"Petek",
"Sobota"
],
"shortDays": ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"],
"toolbar": {
"exportToSVG": "Prenesi SVG",
"exportToPNG": "Prenesi PNG",
"exportToCSV": "Prenesi CSV",
"menu": "Menu",
"selection": "Izbiranje",
"selectionZoom": "Zoom: Izbira",
"zoomIn": "Zoom: Približaj",
"zoomOut": "Zoom: Oddalji",
"pan": "Pomikanje",
"reset": "Resetiraj"
}
}
}

@ -0,0 +1,55 @@
{
"name": "sq",
"options": {
"months": [
"Janar",
"Shkurt",
"Mars",
"Prill",
"Maj",
"Qershor",
"Korrik",
"Gusht",
"Shtator",
"Tetor",
"Nëntor",
"Dhjetor"
],
"shortMonths": [
"Jan",
"Shk",
"Mar",
"Pr",
"Maj",
"Qer",
"Korr",
"Gush",
"Sht",
"Tet",
"Nën",
"Dhj"
],
"days": [
"e Dielë",
"e Hënë",
"e Martë",
"e Mërkurë",
"e Enjte",
"e Premte",
"e Shtunë"
],
"shortDays": ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Sht"],
"toolbar": {
"exportToSVG": "Shkarko SVG",
"exportToPNG": "Shkarko PNG",
"exportToCSV": "Shkarko CSV",
"menu": "Menu",
"selection": "Seleksiono",
"selectionZoom": "Seleksiono Zmadhim",
"zoomIn": "Zmadho",
"zoomOut": "Zvogëlo",
"pan": "Spostoje",
"reset": "Rikthe dimensionin"
}
}
}

@ -0,0 +1,55 @@
{
"name": "th",
"options": {
"months": [
"มกราคม",
"กุมภาพันธ์",
"มีนาคม",
"เมษายน",
"พฤษภาคม",
"มิถุนายน",
"กรกฎาคม",
"สิงหาคม",
"กันยายน",
"ตุลาคม",
"พฤศจิกายน",
"ธันวาคม"
],
"shortMonths": [
"ม.ค.",
"ก.พ.",
"มี.ค.",
"เม.ย.",
"พ.ค.",
"มิ.ย.",
"ก.ค.",
"ส.ค.",
"ก.ย.",
"ต.ค.",
"พ.ย.",
"ธ.ค."
],
"days": [
"อาทิตย์",
"จันทร์",
"อังคาร",
"พุธ",
"พฤหัสบดี",
"ศุกร์",
"เสาร์"
],
"shortDays": ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
"toolbar": {
"exportToSVG": "ดาวน์โหลด SVG",
"exportToPNG": "ดาวน์โหลด PNG",
"exportToCSV": "ดาวน์โหลด CSV",
"menu": "เมนู",
"selection": "เลือก",
"selectionZoom": "เลือกจุดที่จะซูม",
"zoomIn": "ซูมเข้า",
"zoomOut": "ซูมออก",
"pan": "ปรากฎว่า",
"reset": "รีเซ็ตการซูม"
}
}
}

@ -0,0 +1,55 @@
{
"name": "tr",
"options": {
"months": [
"Ocak",
"Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık"
],
"shortMonths": [
"Oca",
"Şub",
"Mar",
"Nis",
"May",
"Haz",
"Tem",
"Ağu",
"Eyl",
"Eki",
"Kas",
"Ara"
],
"days": [
"Pazar",
"Pazartesi",
"Salı",
"Çarşamba",
"Perşembe",
"Cuma",
"Cumartesi"
],
"shortDays": ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
"toolbar": {
"exportToSVG": "SVG İndir",
"exportToPNG": "PNG İndir",
"exportToCSV": "CSV İndir",
"menu": "Menü",
"selection": "Seçim",
"selectionZoom": "Seçim Yakınlaştır",
"zoomIn": "Yakınlaştır",
"zoomOut": "Uzaklaştır",
"pan": "Kaydır",
"reset": "Yakınlaştırmayı Sıfırla"
}
}
}

@ -0,0 +1,55 @@
{
"name": "ua",
"options": {
"months": [
"Січень",
"Лютий",
"Березень",
"Квітень",
"Травень",
"Червень",
"Липень",
"Серпень",
"Вересень",
"Жовтень",
"Листопад",
"Грудень"
],
"shortMonths": [
"Січ",
"Лют",
"Бер",
"Кві",
"Тра",
"Чер",
"Лип",
"Сер",
"Вер",
"Жов",
"Лис",
"Гру"
],
"days": [
"Неділя",
"Понеділок",
"Вівторок",
"Середа",
"Четвер",
"П'ятниця",
"Субота"
],
"shortDays": ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
"toolbar": {
"exportToSVG": "Зберегти SVG",
"exportToPNG": "Зберегти PNG",
"exportToCSV": "Зберегти CSV",
"menu": "Меню",
"selection": "Вибір",
"selectionZoom": "Вибір із збільшенням",
"zoomIn": "Збільшити",
"zoomOut": "Зменшити",
"pan": "Переміщення",
"reset": "Скинути збільшення"
}
}
}

@ -0,0 +1,55 @@
{
"name": "zh-cn",
"options": {
"months": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"shortMonths": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
],
"days": [
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
],
"shortDays": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
"toolbar": {
"exportToSVG": "下载 SVG",
"exportToPNG": "下载 PNG",
"exportToCSV": "下载 CSV",
"menu": "菜单",
"selection": "选择",
"selectionZoom": "选择缩放",
"zoomIn": "放大",
"zoomOut": "缩小",
"pan": "平移",
"reset": "重置缩放"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save