今日营业额
¥—
加载中
今日订单
—
全部订单数
待配送
—
送上门待处理
待自提
—
到店自提待处理
最新订单全部 ›
加载中…
库存预警查看 ›
加载中…
| 商品 | 分类 | 售价 | 划线价 | 单位 | 库存 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| 加载中… | |||||||
—
⚠️ 此页面显示所有已下架商品。可重新上架或永久删除。
| 商品 | 分类 | 售价 | 库存 | 下架时间 | 操作 | |
|---|---|---|---|---|---|---|
| 加载中… | ||||||
—
上架新商品
|
低于此值显示预警 |
📷
点击上传商品图片
支持 JPG · PNG · WEBP
建议尺寸 800 × 800 px |
| 预览 | 标题 | 副标题 | 跳转商品ID | 排序 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| 加载中… | ||||||
📋 建表SQL(首次使用执行)
-- 如果banners表已存在,补全缺失字段 ALTER TABLE banners ADD COLUMN IF NOT EXISTS subtitle text; ALTER TABLE banners ADD COLUMN IF NOT EXISTS emoji text DEFAULT '🛒'; ALTER TABLE banners ADD COLUMN IF NOT EXISTS bg_color text DEFAULT '#E02020'; ALTER TABLE banners ADD COLUMN IF NOT EXISTS link_id int; ALTER TABLE banners ADD COLUMN IF NOT EXISTS sort_order int DEFAULT 1; ALTER TABLE banners ADD COLUMN IF NOT EXISTS enabled boolean DEFAULT true; -- 如果banners表不存在则新建 CREATE TABLE IF NOT EXISTS banners ( id serial primary key, title text not null, subtitle text, emoji text default '🛒', bg_color text default '#E02020', link_id int, sort_order int default 1, enabled boolean default true, created_at timestamptz default now() ); -- 插入默认数据(已存在则跳过) INSERT INTO banners (title,subtitle,emoji,bg_color,sort_order,enabled) SELECT '新鲜蔬菜每日直采','今日特惠·限量供应','🥦','#2E7D32',1,true WHERE NOT EXISTS (SELECT 1 FROM banners WHERE title='新鲜蔬菜每日直采'); INSERT INTO banners (title,subtitle,emoji,bg_color,sort_order,enabled) SELECT '精选肉类冷鲜直送','品质保证·放心购买','🥩','#C62828',2,true WHERE NOT EXISTS (SELECT 1 FROM banners WHERE title='精选肉类冷鲜直送'); INSERT INTO banners (title,subtitle,emoji,bg_color,sort_order,enabled) SELECT '应季水果新鲜到家','源头直采·天天上新','🍎','#E65100',3,true WHERE NOT EXISTS (SELECT 1 FROM banners WHERE title='应季水果新鲜到家');
全部
待付款
待发货
配送中
待自提
已完成
已取消
🔍
| 订单号 | 收货人 | 商品 | 实付 | 配送 | 下单时间 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| 加载中… | |||||||
—
| 订单号 | 收货人 | 地址 | 商品 | 金额 | 下单时间 | 状态 | 操作 | |
|---|---|---|---|---|---|---|---|---|
| 加载中… | ||||||||
—
| 券名 | 面值 | 门槛 | 有效期 | 适用范围 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| 加载中… | ||||||
📋 建表SQL
CREATE TABLE IF NOT EXISTS coupons ( id serial primary key, name text not null, amount numeric default 0, min_order numeric default 0, total_count int default 1000, used_count int default 0, expire_at date, scope text default '全场通用', status int default 1, created_at timestamptz default now() );
🎰 转盘活动控制
加载中…
每天分享最多获得几次
奖品管理
| 奖品 | 类型 | 面值 | 门槛 | 权重 | 概率 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| 加载中… | |||||||
💡 权重为相对值,实际概率 = 该奖品权重 / 所有奖品权重之和 × 100%
📋 建表SQL(首次使用执行)
CREATE TABLE IF NOT EXISTS lucky_draw_config (
id int primary key default 1,
enabled boolean default true,
title text default '新人专享福利',
subtitle text default '限时领取·今日有效',
daily_limit int default 1,
share_extra int default 2,
updated_at timestamptz default now()
);
CREATE TABLE IF NOT EXISTS lucky_draw_prizes (
id serial primary key,
name text not null,
emoji text default '🎁',
type text default 'coupon',
value numeric default 0,
min_order numeric default 0,
probability int default 10,
color text default '#FFF0F0',
enabled boolean default true,
sort_order int default 0
);
INSERT INTO lucky_draw_config (id,enabled,title,subtitle,daily_limit,share_extra)
VALUES (1,true,'新人专享福利','每天抽1次,分享可多抽',1,2) ON CONFLICT (id) DO NOTHING;
INSERT INTO lucky_draw_prizes (name,emoji,type,value,min_order,probability,color,sort_order) VALUES
('5元优惠券','🎫','coupon',5,30,15,'#FF6B6B',1),
('谢谢参与','😊','empty',0,0,20,'#FFB347',2),
('3元优惠券','🎫','coupon',3,20,25,'#87CEEB',3),
('积分+20','💰','points',20,0,20,'#98D98E',4),
('再来一次','🔄','retry',0,0,10,'#DDA0DD',5),
('10元优惠券','🎁','coupon',10,50,5,'#F0E68C',6),
('免运费','🚚','coupon',0,0,5,'#FFA07A',7)
ON CONFLICT DO NOTHING;
-- ⚠️ 关键:开启RLS并允许所有操作(管理后台和小程序都能读写)
ALTER TABLE lucky_draw_config ENABLE ROW LEVEL SECURITY;
ALTER TABLE lucky_draw_prizes ENABLE ROW LEVEL SECURITY;
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
ALTER TABLE goods ENABLE ROW LEVEL SECURITY;
ALTER TABLE banners ENABLE ROW LEVEL SECURITY;
ALTER TABLE coupons ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "allow_all_lucky_config" ON lucky_draw_config;
DROP POLICY IF EXISTS "allow_all_lucky_prizes" ON lucky_draw_prizes;
DROP POLICY IF EXISTS "allow_all_orders" ON orders;
DROP POLICY IF EXISTS "allow_all_goods" ON goods;
DROP POLICY IF EXISTS "allow_all_banners" ON banners;
DROP POLICY IF EXISTS "allow_all_coupons" ON coupons;
CREATE POLICY "allow_all_lucky_config" ON lucky_draw_config FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "allow_all_lucky_prizes" ON lucky_draw_prizes FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "allow_all_orders" ON orders FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "allow_all_goods" ON goods FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "allow_all_banners" ON banners FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "allow_all_coupons" ON coupons FOR ALL USING (true) WITH CHECK (true);
🔧 第一步:数据库读写权限(必须执行)
如果后台保存任何数据失败,执行此SQL即可解决。只需执行一次。
-- 一键开放所有表的读写权限
DO $$
DECLARE
t text;
BEGIN
FOREACH t IN ARRAY ARRAY['goods','orders','banners','coupons','lucky_draw_config','lucky_draw_prizes','users','categories','cart_items','stations','user_coupons','group_sessions']
LOOP
BEGIN
EXECUTE format('ALTER TABLE %I ENABLE ROW LEVEL SECURITY', t);
EXCEPTION WHEN others THEN NULL;
END;
BEGIN
EXECUTE format('DROP POLICY IF EXISTS "allow_all_%s" ON %I', t, t);
EXCEPTION WHEN others THEN NULL;
END;
BEGIN
EXECUTE format('CREATE POLICY "allow_all_%s" ON %I FOR ALL USING (true) WITH CHECK (true)', t, t);
EXCEPTION WHEN others THEN NULL;
END;
END LOOP;
END $$;
基本设置
📋 orders 表建表SQL(前后端联通必须执行)
CREATE TABLE IF NOT EXISTS orders ( id bigserial primary key, local_id text, items text, address text, delivery_type text default 'delivery', remark text, total_price numeric, delivery_fee numeric default 0, pay_total numeric, status int default 0, user_name text, user_phone text, user_address text, created_at timestamptz default now() );
📋 goods 表字段补全SQL(对准前端字段用)
-- ① 补全 goods 表缺失字段 ALTER TABLE goods ADD COLUMN IF NOT EXISTS price numeric; ALTER TABLE goods ADD COLUMN IF NOT EXISTS original_price numeric; ALTER TABLE goods ADD COLUMN IF NOT EXISTS unit text DEFAULT '件'; ALTER TABLE goods ADD COLUMN IF NOT EXISTS category_id int2; ALTER TABLE goods ADD COLUMN IF NOT EXISTS stock int4 DEFAULT 0; ALTER TABLE goods ADD COLUMN IF NOT EXISTS stock_warn int4 DEFAULT 20; ALTER TABLE goods ADD COLUMN IF NOT EXISTS tags text; ALTER TABLE goods ADD COLUMN IF NOT EXISTS detail text; ALTER TABLE goods ADD COLUMN IF NOT EXISTS is_hot boolean DEFAULT true; ALTER TABLE goods ADD COLUMN IF NOT EXISTS is_new boolean DEFAULT true; ALTER TABLE goods ADD COLUMN IF NOT EXISTS status int2 DEFAULT 1; ALTER TABLE goods ADD COLUMN IF NOT EXISTS sold_count int4 DEFAULT 0; ALTER TABLE goods ADD COLUMN IF NOT EXISTS updated_at timestamptz DEFAULT now(); -- ② 同步旧字段数据 UPDATE goods SET price = group_price WHERE price IS NULL AND group_price IS NOT NULL; UPDATE goods SET status = 1 WHERE status IS NULL; -- ③ 查看 goods 表所有字段(执行后在结果里确认字段名) SELECT column_name, data_type, column_default FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'goods' ORDER BY ordinal_position; -- 开启RLS,允许所有操作(管理后台写入 + 小程序读取) ALTER TABLE goods ENABLE ROW LEVEL SECURITY; ALTER TABLE orders ENABLE ROW LEVEL SECURITY; ALTER TABLE banners ENABLE ROW LEVEL SECURITY; ALTER TABLE coupons ENABLE ROW LEVEL SECURITY; DROP POLICY IF EXISTS "allow_all_goods" ON goods; DROP POLICY IF EXISTS "allow_all_orders" ON orders; DROP POLICY IF EXISTS "allow_all_banners" ON banners; DROP POLICY IF EXISTS "allow_all_coupons" ON coupons; CREATE POLICY "allow_all_goods" ON goods FOR ALL USING (true) WITH CHECK (true); CREATE POLICY "allow_all_orders" ON orders FOR ALL USING (true) WITH CHECK (true); CREATE POLICY "allow_all_banners" ON banners FOR ALL USING (true) WITH CHECK (true); CREATE POLICY "allow_all_coupons" ON coupons FOR ALL USING (true) WITH CHECK (true);