- 多工厂(factory 表) + 顶栏工厂下拉过滤, 库存按厂聚合 - 厂间调拨(transfer): 源厂减+目标厂加, 总库存不变, 双向流水对账 - 替代料关系(substitute): 出库/BOM领料/生产领料缺料时提示可替代料 - 流水台账(ledger): 入出按日期合并折叠, 按日期导出同一 Excel - 生产订单增强: 编辑/删除(级联清关联流水)/调入数量/确认调入=厂间调拨 - 入库新增送货日期字段; 出库物料编码扫码定位 - 重写 README 补全全部模块; .gitignore 排除 dist_pkg/build_pkg/*.db - 停止跟踪 instance/app.db(运行时自动生成)
53 lines
2.1 KiB
HTML
53 lines
2.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{% block title %}物料入库系统{% endblock %}</title>
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
|
</head>
|
|
<body>
|
|
<header class="topbar">
|
|
<div class="brand">📦 物料入库系统 <span class="ver">M1+M2+M3</span></div>
|
|
<form class="factory-switch" method="post" action="{{ url_for('set_factory') }}">
|
|
<label for="facSel">工厂</label>
|
|
<select id="facSel" name="factory_id" onchange="this.form.submit()">
|
|
<option value="all">全部工厂(汇总)</option>
|
|
{% for f in factories %}
|
|
<option value="{{ f.id }}" {% if current_factory_id == f.id %}selected{% endif %}>{{ f.code }} · {{ f.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</form>
|
|
<nav>
|
|
<a href="{{ url_for('dashboard') }}">库存看板</a>
|
|
<a href="{{ url_for('materials') }}">物料</a>
|
|
<a href="{{ url_for('inbound') }}">入库</a>
|
|
<a href="{{ url_for('outbound') }}">出库</a>
|
|
<a href="{{ url_for('ledger') }}">流水</a>
|
|
{% if g.user and g.user.role in ('admin','manager') %}
|
|
<a href="{{ url_for('boms') }}">BOM</a>
|
|
<a href="{{ url_for('orders') }}">生产订单</a>
|
|
<a href="{{ url_for('report') }}">报表</a>
|
|
<a href="{{ url_for('logs') }}">日志</a>
|
|
<a href="{{ url_for('factories') }}">工厂</a>
|
|
<a href="{{ url_for('transfers') }}">调拨</a>
|
|
<a href="{{ url_for('substitutes') }}">替代料</a>
|
|
{% endif %}
|
|
{% if g.user and g.user.role == 'admin' %}
|
|
<a href="{{ url_for('users') }}">用户</a>
|
|
{% endif %}
|
|
{% if g.user %}<span class="who">{{ g.user.display_name or g.user.username }} ({{ g.user.role }})</span>
|
|
<a href="{{ url_for('logout') }}">退出</a>{% endif %}
|
|
</nav>
|
|
</header>
|
|
<main>
|
|
{% with msgs = get_flashed_messages(with_categories=true) %}
|
|
{% for cat, msg in msgs %}
|
|
<div class="flash {{ cat }}">{{ msg }}</div>
|
|
{% endfor %}
|
|
{% endwith %}
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
</body>
|
|
</html>
|