美文网首页
2019-10-07

2019-10-07

作者: 托贝多尔 | 来源:发表于2019-10-07 21:06 被阅读0次

js

String.prototype.format = function (args) {
    var result = this;
    if (arguments.length > 0) {
        if (arguments.length === 1 && typeof (args) == "object") {
            for (var key in args) {
                if (args[key] !== undefined) {
                    var reg = new RegExp("({" + key + "})", "g");
                    result = result.replace(reg, args[key]);
                }
            }
        } else {
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] !== undefined) {
                    var reg = new RegExp("({)" + i + "(})", "g");
                    result = result.replace(reg, arguments[i]);
                }
            }
        }
    }
    return result;
};


//新增

window.onload = function appendrow() {
    var tbdDom = document.getElementById('tbd');
    var tbnDom = document.getElementById('tbn');
    var x = "";
    tbnDom.onclick = function () {
        for (i = 0; i < 6; i++) {
            x += "<td style=\"text-align: center\"><input style=\"width:100%\" id={ddd} type=\"text\" ></td>".format({"ddd": i});
        }
        x += "<td style=\"text-align: center\"><input class=\"btn btn-info\" style='background-color:green' type=\"button\" onclick='delettr(this)' value=\"取消\"></td><td style=\"text-align: center\" ><input class=\"btn btn-info\" style='background-color:red' type=\"button\"  onclick='save_row(this)' value=\"保存\"></td></tr>";
        tbdDom.innerHTML = "<tr id='tr'>" + x;
        x = ""
    }
};

function delettr(obj) {
    var tbdom = document.getElementById('tbd');
    var trDom = document.getElementById('tr');
    tbdom.removeChild(trDom)
}

function save_row(obj) {
    var valuedic = [];
    for (i = 0; i < 6; i++) {
        valuedic[i] = document.getElementById(i).value;
    }
    $.ajax({
        type: "POST",
        url: '/edit/appendrow/',

        data: JSON.stringify({valuedic: valuedic},),
        success: function (args) {
            alert(args.msg);
            delettr(obj);
        }
    });

}

// 查询
function query_result() {
    var tbodyDom = document.getElementById('tbd');
    var x = "{% for row in rowlist %}<tr>{% for val in row %}<td>{{ val }}</td>{% endfor %}</tr>{% endfor %}";

    var select_text = [];
    for (i = 0; i < 6; i++) {
        var options = $('#selected{id} option:selected'.format({'id': i + 1}));
        values = options.val();
        // console.log(values);
        select_text[i] += values;
    }
    // console.log(select_text);
    $.ajax({
        type: "POST",
        url: "/edit/",
        data: JSON.stringify({selected_titles: select_text},),
        success: function (data) {
            // alert(data.msg[2]);
            var value_list = data.msg;
            // alert(data.msg.length);
            var z = '';
            for (j = 0; j < data.msg.length; j++) {
                var y = "<tr>";
                for (k = 0; k < 6; k++) {
                    y += "<td >" + value_list[j][k] + "</td>"
                }
                y += "<td style=\"display:none;\">" + value_list[j][6] + "</td><td style=\"text-align: center\" ><input class=\"btn btn-info\" style='background-color:forestgreen' type=\"button\"  onclick='change_row(this)' value=\"修改\"></td><td style=\"text-align: center\"><input class=\"btn btn-info\" style='background-color:red' type=\"button\" onclick='delet_row(this)' value=\"删除\"></td></tr>";
                z += y;
            }
            tbodyDom.innerHTML = z;

        }
    });

}

var change_num = 0;
var trHtml = '';

//修改某一行
function change_row(obj) {
    if (change_num === 0) {
        var htdDom = obj.parentElement.previousSibling;
        var trDom = obj.parentElement.parentElement;
        console.log(htdDom.tagName);
        console.log(trDom.innerHTML);
        trHtml = trDom.innerHTML;
        var x = "";
        for (i = 0; i < 6; i++) {
            x += "<td style=\"text-align: center\"><input style=\"width:100%\" type=\"text\" value='{value}' ></td>".format({value: trDom.childNodes[i].innerText});
        }
        x = x + "<td style=\"display:none;\">" + htdDom.innerText + "</td>";
        trDom.innerHTML = x + "<td style=\"text-align: center\"><input class=\"btn btn-info\" style='background-color:green' type=\"button\" onclick='cenceltr(this)' value=\"取消\"></td><td style=\"text-align: center\" ><input class=\"btn btn-info\" style='background-color:red' type=\"button\"  onclick='save_change(this)' value=\"保存\"></td></tr>";
        change_num += 1;
    } else {
        alert('请逐个条修改!')
    }
}


function cenceltr(obj) {
    var trDom = obj.parentElement.parentElement;
    //使用正则删除多出来的font标签
    trDom.innerHTML = trHtml.replace(/<\/?font[^>]*>/gi, "");
    change_num = 0;
}

function save_change(obj) {
    change_num = 0;
    var htdDom = obj.parentElement.previousSibling.previousSibling;
    var trDom = obj.parentElement.parentElement;
    console.log(htdDom.tagName);
    console.log(trDom.getElementsByTagName('input')[1].value);
    console.log(htdDom.innerText);
    var row_value = [];
    for (i = 0; i < 6; i++) {
        row_value[i] = trDom.getElementsByTagName('input')[i].value
    }
    row_value[6] = htdDom.innerText;
    console.log(row_value);
    if (confirm('确定保存修改吗?')) {
        $.ajax({
            type: 'POST',
            url: '/edit/changerow/',
            data: JSON.stringify({row_value: row_value}),
            success: function (data) {
                alert(data.msg);
                var x = '';
                for (i = 0; i < 6; i++) {
                    x += "<td>{value}</td>".format({value: trDom.getElementsByTagName('input')[i].value})
                }
                x = x + "<td style=\"display:none;\">" + htdDom.innerText + "</td>";
                x += "<td style=\"text-align: center\" ><input class=\"btn btn-info\" style='background-color:forestgreen' type=\"button\"  onclick='change_row(this)' value=\"修改\"></td><td style=\"text-align: center\"><input class=\"btn btn-info\" style='background-color:red' type=\"button\" onclick='delet_row(this)' value=\"删除\"></td>";
                trDom.innerHTML = x;
            }
        })
    }
}

//删除一行
function delet_row(obj) {
    var htdDom = obj.parentElement.previousSibling.previousSibling;
    var trDom = obj.parentElement.parentElement;
    console.log(htdDom.tagName);
    console.log(trDom.innerHTML);
    trHtml = trDom.innerHTML;
    var row_value = [];
    for (i = 0; i < 6; i++) {
        row_value[i] = trDom.childNodes[i].innerText;
    }
    row_value[6] = htdDom.innerText;
    console.log(row_value);
    if (confirm('确定删除吗?')) {
        $.ajax({
            type: "POST",
            url: "/edit/deleterow/",
            data: JSON.stringify({row_value: row_value}),
            success: function (data) {
                alert(data.msg);
                trDom.remove()
            }
        })
    }
}

base.html

<!DOCTYPE html>
<html lang="en">
{% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <title>表格文档管理系统</title>
    <script src="{% static 'js/editjs.js' %} " type="text/javascript "></script>
    <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
    <link href="{% static 'css/font-awesome.min.css' %}" rel="stylesheet">
    <style type="text/css">

    </style>
</head>
<body>
{% block content %}

{% endblock %}
<script src="{% static 'js/jquery-3.4.1.min.js' %}" type="text/javascript"></script>
<script type="text/javascript" src="{% static 'js/bootstable.js' %}"></script>

<script>

</script>
</body>
</html>

index.html

{% extends 'base.html' %}
{% block content %}


<div class="container">

    <div class="row"  >
    <div>
    <h1>物料管理系统</h1>
        <a href="{% url 'edit:addpage' %}"><button class="btn btn-info" id="addbtn"> 新增</button></a>
    </div>
        <div class="col-md-12" style="padding:2em 0;">
            <div class="table-responsive">

                <table class="table table-bordered tab-content" id="mytable">
                    <thead>
                    <tr valign="middle">
                        {% for title in titles %}
                            <th style="text-align: center">{{ title }}</th>
                        {% endfor %}
                        <td rowspan="2" style="text-align:center;vertical-align:middle;">
                            <button class="btn btn-info" id="btn" onclick="query_result() "> 查询</button>
                        </td>
                        <td rowspan="2" style="text-align:center;vertical-align:middle;">
                            <button class="btn btn-info" id="tbn"> 新增</button>
                        </td>
                    </tr>
                    <tr >
                        {% for cols in titles_list %}

                            <td style="text-align: center">
                                <select style="width:100%"  name="title" id="selected{{ forloop.counter }}">
                                    <option value='' selected=""></option>
                                    {% for col in cols %}
                                        <option value={{ col }}>{{ col }}</option>
                                    {% endfor %}
                                </select>
                            </td>
                        {% endfor %}
                    </tr>
                    </thead>

                    <tbody id="tbd">

                    </tbody>
                </table>
            </div>

        </div>

    </div>
</div>



{% endblock %}

view.py

import json
import os
import time

import pythoncom
import xlwings as xw
import xlrd
from django.http import JsonResponse
from django.shortcuts import render

# Create your tests here.
from utils import util
from utils.util import equals, Myapp, stablequal

path = 'C:\\Users\Administrator\Desktop\\first_project\ExcelOnline\storybook.xlsx'
sheet_name = 'story'


def index(request):
    '''
    查询首页
    :param request:
    :return:
    '''
    print('-----------------------------------')
    if request.method == 'GET':
        start_time = time.time()
        xbook = xlrd.open_workbook(path)
        xtable = xbook.sheet_by_name(sheet_name)
        cols_list = []
        for i in range(xtable.ncols):
            cols = xtable.col_values(i, start_rowx=1)
            col_values = []
            for j in cols:
                if j not in col_values and j != '':
                    col_values.append(j)
            cols_list.append(col_values)
        titles = xtable.row_values(0)
        end_time = time.time()
        print('加载耗时:', end_time - start_time)

        return render(request, 'index.html', {'titles_list': cols_list, 'titles': titles})
    if request.method == 'POST':
        selected_titles = json.loads(request.body.decode('utf-8'))['selected_titles']
        for i in range(len(selected_titles)):
            if 'undefined' in selected_titles[i]:
                selected_titles[i] = selected_titles[i].replace('undefined', '')
        print(selected_titles)
        start_time = time.time()
        xbook = xlrd.open_workbook(path)
        xtable = xbook.sheet_by_name(sheet_name)
        row_list = []
        for i in range(1, xtable.nrows):
            row_values = [str(j) for j in xtable.row_values(i, start_colx=0, end_colx=None)]
            if equals(row_values, selected_titles):
                row_values.append(i + 1)
                row_list.append(row_values)
        end_time = time.time()
        print('查询耗时:', end_time - start_time)
        print(row_list)
        return JsonResponse(data={'msg': row_list})


def add_page(request):
    if request.method == 'GET':
        start_time = time.time()
        xbook = xlrd.open_workbook(path)
        xtable = xbook.sheet_by_name(sheet_name)
        cols_list = []
        for i in range(2):
            cols = xtable.col_values(i, start_rowx=1)
            col_values = []
            for j in cols:
                if j not in col_values and j != '':
                    col_values.append(j)
            cols_list.append(col_values)
        titles = xtable.row_values(0)
        end_time = time.time()
        print('加载耗时:', end_time - start_time)

        return render(request, 'addpage.html', {'titles_list': cols_list, 'titles': titles})

def append_row(request):
    '''
    新增一行
    :param request:
    :return:
    '''
    if request.method == 'POST':
        print('过来')
        # print(request.POST)
        # print(type(request.POST))
        values_lsit = json.loads(request.body.decode('utf-8'))['valuedic']
        print(values_lsit)
        result = [False if i == '' else True for i in values_lsit]
        if not True in result:
            data = {'msg': '没有写入内容!'}
        else:
            pythoncom.CoInitialize()
            app = Myapp()
            start_time = time.time()
            xbook = app.books.open(path)
            xtable = xbook.sheets(sheet_name)
            info = xtable.used_range
            last_row = str(info.last_cell.row + 1)
            print('last_row:', last_row)
            xtable.range('a' + last_row).value = values_lsit
            xbook.save()
            xbook.close()
            app.kill()
            util.app_list = []
            end_time = time.time()
            print('添加耗时:', end_time - start_time)
            data = {'msg': '添加成功!'}
        return JsonResponse(data)


def change_row(request):
    '''
    修改某一行
    :param request:
    :return:
    '''
    if request.method == "POST":
        row_value = json.loads(request.body.decode('utf-8'))['row_value']

        pythoncom.CoInitialize()
        app = Myapp()
        start_time = time.time()
        xbook = app.books.open(path)
        xtable = xbook.sheets(sheet_name)
        row_num = row_value[-1]
        rows = xtable.range('a' + row_num + ':f' + row_num).value
        row_list = ['' if not rows[i] else str(rows[i]) for i in range(len(rows))]
        print('row_value:', row_value[:-1])
        print('row_list:', row_list)
        if stablequal(row_list, row_value[:-1]):
            print(stablequal(row_list, row_value[:-1]))
            xbook.save()
            xbook.close()
            app.kill()
            util.app_list = []
            end_time = time.time()
            print('修改耗时:', end_time - start_time)
            return JsonResponse({'msg': '没有任何改动!'})
        else:
            xtable.range('a' + row_num + ':f' + row_num).value = row_value[:-1]
            xbook.save()
            xbook.close()
            app.kill()
            util.app_list = []
            end_time = time.time()
            print('修改耗时:', end_time - start_time)
            return JsonResponse({'msg': '更新成功!'})


def delete_row(request):
    '''
    删除某一行
    :param request:
    :return:
    '''
    if request.method == "POST":
        row_value = json.loads(request.body.decode('utf-8'))['row_value']
        pythoncom.CoInitialize()
        app = Myapp()
        start_time = time.time()
        xbook = app.books.open(path)
        xtable = xbook.sheets(sheet_name)
        row_num = row_value[-1]
        print(xtable.range('a' + row_num + ':f' + row_num).value)
        xtable.range('a' + row_num + ':f' + row_num).clear()
        xbook.save()
        xbook.close()
        app.kill()
        util.app_list = []
        end_time = time.time()
        print('删除耗时:', end_time - start_time)
        return JsonResponse({'msg': '删除成功!'})

url.py


import Edit
from Edit import views

app_name = 'edit'
urlpatterns = [
    path('', views.index, name='index'),
    path('appendrow/', Edit.views.append_row, name='appendrow'),
    path('changerow/', Edit.views.change_row, name='changerow'),
    path('deleterow/', Edit.views.delete_row, name='deleterow'),
    path('addpage/', Edit.views.add_page, name='addpage')
]

setting.py

# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]


# 发送邮件的设置
EMAIL_HOST = 'smtp.126.com'
EMAIL_HOST_USER = 'zhangpengv@126.com'
EMAIL_HOST_PASSWORD = '581321pengv'
EMAIL_PORT = 25
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False  # 126,QQ: 465   163:454

util.py

import pythoncom

from ExcelOnline.settings import EMAIL_HOST_USER



def equals(a, b):
    '''
    搜索逻辑
    :param a:
    :param b:
    :return:
    '''
    c = {}
    for i in range(len(b)):
        if b[i] != '':  # b是查询关键字列表
            c[i] = b[i]
    d = []
    for key, value in c.items():
        if a[key] == value:
            d.append(True)
        else:
            d.append(False)
    return False if False in d else True


def stablequal(a, b):
    '''
    判恒等
    :param a:
    :param b:
    :return:
    '''
    c = []
    for i in range(len(a)):
        if len(a) == len(b) and a[i] == b[i]:
            c.append(True)
        else:
            c.append(False)
    return False if False in c else True


import xlwings as xw

app_list = []

class Myapp():
    def __new__(cls, *args, **kwargs):
        print(app_list)
        if len(app_list):
            app = app_list.pop()
            app.kill()
            app = xw.App(visible=False, add_book=False)
            app.display_alerts = False
            app.screen_updating = True
            app_list.append(app)
            return app
        else:
            app = xw.App(visible=False, add_book=False)
            app.display_alerts = False
            app.screen_updating = True
            app_list.append(app)
            return app



import uuid

from django.core.mail import send_mail




# 找回密码发送邮件
# def send_email(email, request):
#     subject = '找回密码'
#     user1 = User.objects.filter(email=email).first()
#     ran_code = uuid.uuid4()
#     ran_code = str(ran_code)
#     ran_code = ran_code.replace('-', '')
#     request.session['ran_code'] = user1.id
#     message = '''
#      可爱的用户:
#             <br>
#             亲爱的%s,
#                 点击 <a href='http://127.0.0.1:8000/user/update_psd'>这里</a>可以重置你的密码,
#             如果无法点击,你也可以将下面的地址复制到浏览器中打开:
#                 <br>
#                 http://127.0.0.1:8000/user/update_psd
#     ''' % (user1.nickname,)
#     # 发送邮件send_mail
#     result = send_mail(subject, "", EMAIL_HOST_USER, [email, ], html_message=message)
#     return result

相关文章

  • 2019-10-07

    2019-10-07 20:18:34.331543+0800 KaBuKaBu[3237:2535020] <_...

  • 有阳光的被子才有灵魂

    2019-10-07 星期一 天气晴 有阳光的被子才...

  • 2019-10-08

    2019-10-08 宗明3 字数 254 · 阅读 0 2019-10-07 21:55 2019-10-08 ...

  • 2019-10-07

    2019-10-06 宗明3 字数 940 · 阅读 5 2019-10-06 18:38 2019-10-07 ...

  • 第二天

    2019-10-07:了解下梯度下降法(原本想着一天搞定一点内容)、如何学习、学习方法

  • 和风计较

    2019-10-07 阴 北京·西城 鼓楼大街 我不是很懂生命的意义,但是最起码自己看得起自己,自己尊重自己。可能...

  • 感恩的力量

    2019-10-07 清晨睡意朦胧中,只听见窗外急急的雨声敲打着玻璃!我今天休息,可以很好的享受“懒床”“胡思乱想...

  • 2019-10-07

    2019-10-07 姓名:乐美清 公司:宁波华光 《六项精进》第340期 反省二组学员;515期, 反省二组志工...

  • 培训课记录---世界艺术史(一)

    2019-10-07 下午 世界艺术史(宋津津) 老师上课先以游戏引入艺术 游戏就是拍手,每四拍为一节,一...

  • 各自孤独

    白:2019-10-07 01:30 "涛,我今天碰上一件怪事。快烦死我了。" 那天是2019年10月7日,饼摊...

网友评论

      本文标题:2019-10-07

      本文链接:https://www.haomeiwen.com/subject/rzzmpctx.html