数据看板
🔔0
💰
今日营业额
¥—
加载中
📋
今日订单
全部订单数
🚚
待配送
送上门待处理
🏪
待自提
到店自提待处理
最新订单全部 ›
加载中…
库存预警查看 ›
加载中…
🔍
商品分类售价划线价单位库存状态操作
加载中…
🔍
⚠️ 此页面显示所有已下架商品。可重新上架或永久删除。
商品分类售价库存下架时间操作
加载中…
上架新商品
低于此值显示预警
📷
点击上传商品图片
支持 JPG · PNG · WEBP
建议尺寸 800 × 800 px
预览标题副标题跳转商品ID排序状态操作
📋 建表SQL(首次使用执行)
全部
待付款
待发货
配送中
待自提
已完成
已取消
🔍
订单号收货人商品实付配送下单时间状态操作
加载中…
🚚 送上门
🏪 到店自提
订单号收货人地址商品金额下单时间状态操作
加载中…
券名面值门槛有效期适用范围状态操作
加载中…
📋 建表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);