feat(export): 添加计划API和用户隔离功能
新增计划API接口用于查询计划列表,实现模板和导出任务的用户隔离 前端移除数据权限选项,简化表单并添加计划选择器 导出任务和模板列表现在会根据userId参数过滤所属用户的数据
This commit is contained in:
parent
6ac080c9a4
commit
7e7fdbc4cc
|
|
@ -60,6 +60,11 @@ func ExportsHandler(meta, marketing *sql.DB) http.Handler {
|
|||
})
|
||||
}
|
||||
|
||||
func (a *ExportsAPI) ensureOwnerColumn() {
|
||||
// Try to add owner_id column if not exists; ignore errors
|
||||
_, _ = a.meta.Exec("ALTER TABLE export_jobs ADD COLUMN owner_id BIGINT UNSIGNED NOT NULL DEFAULT 0")
|
||||
}
|
||||
|
||||
type ExportPayload struct {
|
||||
TemplateID uint64 `json:"template_id"`
|
||||
RequestedBy uint64 `json:"requested_by"`
|
||||
|
|
@ -71,6 +76,7 @@ type ExportPayload struct {
|
|||
}
|
||||
|
||||
func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) {
|
||||
a.ensureOwnerColumn()
|
||||
b, _ := io.ReadAll(r.Body)
|
||||
var p ExportPayload
|
||||
json.Unmarshal(b, &p)
|
||||
|
|
@ -141,8 +147,13 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) {
|
|||
hdrs[i] = tf
|
||||
}
|
||||
}
|
||||
ejSQL := "INSERT INTO export_jobs (template_id, status, requested_by, permission_scope_json, filters_json, options_json, explain_json, explain_score, row_estimate, file_format, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"
|
||||
ejArgs := []interface{}{p.TemplateID, "queued", p.RequestedBy, toJSON(p.Permission), toJSON(p.Filters), toJSON(p.Options), toJSON(expRows), score, estimate, p.FileFormat, time.Now(), time.Now()}
|
||||
// owner from query userId if provided
|
||||
owner := uint64(0)
|
||||
if uidStr := r.URL.Query().Get("userId"); uidStr != "" {
|
||||
if n, err := strconv.ParseUint(uidStr, 10, 64); err == nil { owner = n }
|
||||
}
|
||||
ejSQL := "INSERT INTO export_jobs (template_id, status, requested_by, owner_id, permission_scope_json, filters_json, options_json, explain_json, explain_score, row_estimate, file_format, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)"
|
||||
ejArgs := []interface{}{p.TemplateID, "queued", p.RequestedBy, owner, toJSON(p.Permission), toJSON(p.Filters), toJSON(p.Options), toJSON(expRows), score, estimate, p.FileFormat, time.Now(), time.Now()}
|
||||
log.Printf("trace_id=%s sql=%s args=%v", TraceIDFrom(r), ejSQL, ejArgs)
|
||||
res, err := a.meta.Exec(ejSQL, ejArgs...)
|
||||
if err != nil {
|
||||
|
|
@ -917,6 +928,7 @@ func toString(v interface{}) string {
|
|||
}
|
||||
}
|
||||
func (a *ExportsAPI) list(w http.ResponseWriter, r *http.Request) {
|
||||
a.ensureOwnerColumn()
|
||||
q := r.URL.Query()
|
||||
page := 1
|
||||
size := 15
|
||||
|
|
@ -939,20 +951,39 @@ func (a *ExportsAPI) list(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
offset := (page - 1) * size
|
||||
var totalCount int64
|
||||
uidStr := q.Get("userId")
|
||||
if tplID > 0 {
|
||||
if uidStr != "" {
|
||||
row := a.meta.QueryRow("SELECT COUNT(1) FROM export_jobs WHERE template_id = ? AND owner_id = ?", tplID, uidStr)
|
||||
_ = row.Scan(&totalCount)
|
||||
} else {
|
||||
row := a.meta.QueryRow("SELECT COUNT(1) FROM export_jobs WHERE template_id = ?", tplID)
|
||||
_ = row.Scan(&totalCount)
|
||||
}
|
||||
} else {
|
||||
if uidStr != "" {
|
||||
row := a.meta.QueryRow("SELECT COUNT(1) FROM export_jobs WHERE owner_id = ?", uidStr)
|
||||
_ = row.Scan(&totalCount)
|
||||
} else {
|
||||
row := a.meta.QueryRow("SELECT COUNT(1) FROM export_jobs")
|
||||
_ = row.Scan(&totalCount)
|
||||
}
|
||||
}
|
||||
var rows *sql.Rows
|
||||
var err error
|
||||
if tplID > 0 {
|
||||
if uidStr != "" {
|
||||
rows, err = a.meta.Query("SELECT id, template_id, status, requested_by, row_estimate, total_rows, file_format, created_at, updated_at, explain_score, explain_json FROM export_jobs WHERE template_id = ? AND owner_id = ? ORDER BY id DESC LIMIT ? OFFSET ?", tplID, uidStr, size, offset)
|
||||
} else {
|
||||
rows, err = a.meta.Query("SELECT id, template_id, status, requested_by, row_estimate, total_rows, file_format, created_at, updated_at, explain_score, explain_json FROM export_jobs WHERE template_id = ? ORDER BY id DESC LIMIT ? OFFSET ?", tplID, size, offset)
|
||||
}
|
||||
} else {
|
||||
if uidStr != "" {
|
||||
rows, err = a.meta.Query("SELECT id, template_id, status, requested_by, row_estimate, total_rows, file_format, created_at, updated_at, explain_score, explain_json FROM export_jobs WHERE owner_id = ? ORDER BY id DESC LIMIT ? OFFSET ?", uidStr, size, offset)
|
||||
} else {
|
||||
rows, err = a.meta.Query("SELECT id, template_id, status, requested_by, row_estimate, total_rows, file_format, created_at, updated_at, explain_score, explain_json FROM export_jobs ORDER BY id DESC LIMIT ? OFFSET ?", size, offset)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
fail(w, r, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
|
|
|
|||
|
|
@ -0,0 +1,75 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type PlansAPI struct {
|
||||
marketing *sql.DB
|
||||
}
|
||||
|
||||
func PlansHandler(marketing *sql.DB) http.Handler {
|
||||
api := &PlansAPI{marketing: marketing}
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
p := strings.TrimPrefix(r.URL.Path, "/api/plans")
|
||||
if r.Method == http.MethodGet && p == "" {
|
||||
api.list(w, r)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
})
|
||||
}
|
||||
|
||||
func (a *PlansAPI) list(w http.ResponseWriter, r *http.Request) {
|
||||
resellerParam := r.URL.Query().Get("reseller")
|
||||
if resellerParam == "" {
|
||||
resellerParam = r.URL.Query().Get("reseller_id")
|
||||
}
|
||||
q := r.URL.Query().Get("q")
|
||||
limitStr := r.URL.Query().Get("limit")
|
||||
limit := 2000
|
||||
if limitStr != "" {
|
||||
if n, err := strconv.Atoi(limitStr); err == nil && n > 0 && n <= 10000 { limit = n }
|
||||
}
|
||||
resellers := []string{}
|
||||
for _, s := range strings.Split(resellerParam, ",") {
|
||||
s = strings.TrimSpace(s)
|
||||
if s != "" { resellers = append(resellers, s) }
|
||||
}
|
||||
if len(resellers) == 0 {
|
||||
ok(w, r, []map[string]interface{}{})
|
||||
return
|
||||
}
|
||||
ph := strings.Repeat("?,", len(resellers))
|
||||
ph = strings.TrimSuffix(ph, ",")
|
||||
sql1 := "SELECT id, COALESCE(title,'') AS title FROM plan WHERE reseller_id IN (" + ph + ")"
|
||||
args := []interface{}{}
|
||||
for _, v := range resellers { args = append(args, v) }
|
||||
if q != "" {
|
||||
sql1 += " AND (CAST(id AS CHAR) LIKE ? OR title LIKE ?)"
|
||||
like := "%" + q + "%"
|
||||
args = append(args, like, like)
|
||||
}
|
||||
sql1 += " ORDER BY id ASC LIMIT ?"
|
||||
args = append(args, limit)
|
||||
rows, err := a.marketing.Query(sql1, args...)
|
||||
if err != nil {
|
||||
fail(w, r, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
out := []map[string]interface{}{}
|
||||
for rows.Next() {
|
||||
var id sql.NullInt64
|
||||
var title sql.NullString
|
||||
if err := rows.Scan(&id, &title); err != nil { continue }
|
||||
if !id.Valid { continue }
|
||||
m := map[string]interface{}{"id": id.Int64, "title": title.String}
|
||||
out = append(out, m)
|
||||
}
|
||||
ok(w, r, out)
|
||||
}
|
||||
|
||||
|
|
@ -16,6 +16,8 @@ func NewRouter(metaDB *sql.DB, marketingDB *sql.DB) http.Handler {
|
|||
mux.Handle("/api/creators/", withAccess(withTrace(CreatorsHandler(marketingDB))))
|
||||
mux.Handle("/api/resellers", withAccess(withTrace(ResellersHandler(marketingDB))))
|
||||
mux.Handle("/api/resellers/", withAccess(withTrace(ResellersHandler(marketingDB))))
|
||||
mux.Handle("/api/plans", withAccess(withTrace(PlansHandler(marketingDB))))
|
||||
mux.Handle("/api/plans/", withAccess(withTrace(PlansHandler(marketingDB))))
|
||||
mux.HandleFunc("/api/utils/decode_key", func(w http.ResponseWriter, r *http.Request) {
|
||||
v := r.URL.Query().Get("v")
|
||||
if v == "" {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type TemplatesAPI struct {
|
||||
|
|
@ -67,6 +68,12 @@ func (a *TemplatesAPI) createTemplate(w http.ResponseWriter, r *http.Request) {
|
|||
var p TemplatePayload
|
||||
json.Unmarshal(b, &p)
|
||||
r = WithPayload(r, p)
|
||||
uidStr := r.URL.Query().Get("userId")
|
||||
if uidStr != "" {
|
||||
var uid uint64
|
||||
_, _ = fmt.Sscan(uidStr, &uid)
|
||||
if uid > 0 { p.OwnerID = uid }
|
||||
}
|
||||
now := time.Now()
|
||||
tplSQL := "INSERT INTO export_templates (name, datasource, main_table, fields_json, filters_json, file_format, visibility, owner_id, enabled, stats_enabled, last_validated_at, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)"
|
||||
tplArgs := []interface{}{p.Name, p.Datasource, p.MainTable, toJSON(p.Fields), toJSON(p.Filters), p.FileFormat, p.Visibility, p.OwnerID, 1, 0, now, now, now}
|
||||
|
|
@ -80,7 +87,15 @@ func (a *TemplatesAPI) createTemplate(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func (a *TemplatesAPI) listTemplates(w http.ResponseWriter, r *http.Request) {
|
||||
rows, err := a.meta.Query("SELECT id,name,datasource,main_table,file_format,visibility,owner_id,enabled,last_validated_at,created_at,updated_at, COALESCE(JSON_LENGTH(fields_json),0) AS field_count, (SELECT COUNT(1) FROM export_jobs ej WHERE ej.template_id = export_templates.id) AS exec_count FROM export_templates ORDER BY updated_at DESC LIMIT 200")
|
||||
uidStr := r.URL.Query().Get("userId")
|
||||
sqlText := "SELECT id,name,datasource,main_table,file_format,visibility,owner_id,enabled,last_validated_at,created_at,updated_at, COALESCE(JSON_LENGTH(fields_json),0) AS field_count, (SELECT COUNT(1) FROM export_jobs ej WHERE ej.template_id = export_templates.id) AS exec_count FROM export_templates"
|
||||
args := []interface{}{}
|
||||
if uidStr != "" {
|
||||
sqlText += " WHERE owner_id IN (0, ?)"
|
||||
args = append(args, uidStr)
|
||||
}
|
||||
sqlText += " ORDER BY updated_at DESC LIMIT 200"
|
||||
rows, err := a.meta.Query(sqlText, args...)
|
||||
if err != nil {
|
||||
fail(w, r, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
订单编号,KEY,支付流水号,订单类型,账号,合同单价,数量,总金额,支付金额,支付方式,支付状态,充值时间,创建时间,更新时间,计划标题,分销商名称,商品名称,官方价,成本价,批次名称,标题,订单状态,商户业务号,是否使用优惠券
|
||||
|
|
|
@ -0,0 +1,130 @@
|
|||
订单编号,KEY,支付流水号,订单类型,账号,合同单价,数量,总金额,支付金额,支付方式,支付状态,充值时间,创建时间,更新时间,计划标题,分销商名称,商品名称,官方价,成本价,批次名称,标题,订单状态,商户业务号,是否使用优惠券
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-官方,充值中,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-专票-发送,充值中,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-专票-不发送,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-官方,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-专票-发送,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡,京东E卡-专票-不发送,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-官方,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-发送,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-官方,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-发送,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-官方,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-专票-发送,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-官方,已完成,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-专票-发送,已完成,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-专票-不发送,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-官方,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-专票-发送,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-专票-不发送,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-官方,充值失败,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-发送,充值失败,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-官方,已完成,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-专票-发送,已完成,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡,京东E卡-专票-不发送,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-官方,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-专票-发送,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡,京东E卡-专票-不发送,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-官方,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-专票-发送,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-官方,充值失败,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-发送,充值失败,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡,京东E卡-专票-不发送,充值失败,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-发送,京东E卡-专票-发送,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-发送,京东E卡-专票-发送,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-发送,京东E卡-专票-发送,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-发送,京东E卡-专票-发送,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-发送,京东E卡-专票-发送,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-发送,京东E卡-专票-发送,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送,京东E卡-专票-发送,充值失败,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_官方,京东E卡-官方,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_官方,京东E卡-官方,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_官方,京东E卡-官方,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_官方,京东E卡-官方,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_官方,京东E卡-官方,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_官方,京东E卡-官方,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_官方,京东E卡-官方,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_官方,京东E卡-官方,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_官方,京东E卡-官方,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_官方,京东E卡-官方,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_官方,京东E卡-官方,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_官方,京东E卡-官方,充值失败,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-不发送,京东E卡-专票-发送,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-不发送,京东E卡-专票-发送,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-不发送,京东E卡-专票-发送,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-不发送,京东E卡-专票-发送,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-不发送,京东E卡-专票-发送,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-不发送,京东E卡-专票-发送,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-不发送,京东E卡-专票-发送,充值失败,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,直充,直充,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,直充,直充,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,直充,直充,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,直充,直充,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,直充,直充,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,直充,直充,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,直充,直充,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,直充,直充,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,直充,直充,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,直充,直充,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,直充,直充,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,直充,直充,充值失败,,2
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,卡密,卡密,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,卡密,卡密,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,卡密,卡密,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,卡密,卡密,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,卡密,卡密,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,卡密,卡密,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,卡密,卡密,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,卡密,卡密,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,卡密,卡密,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,卡密,卡密,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,卡密,卡密,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,卡密,卡密,充值失败,,2
|
||||
250106103834281327,AAACuZALThk42qNk,,直充卡密,,10.0000,1,10.00,0.00,支付宝,已支付,2025-01-06 10:38:35,2025-01-06 10:38:34,2025-01-06 10:38:35,京东E卡测试-优惠券,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡官方,京东E卡官方,已完成,,1
|
||||
250106103910596600,AAACuYBQCvrXSePD,,直充卡密,223232,3.0000,1,3.00,0.00,支付宝,已支付,2025-01-06 10:39:11,2025-01-06 10:39:10,2025-01-06 10:39:12,京东E卡测试-优惠券,京东E卡分销商,爱奇艺黄金会员天卡,6.0000,2.0580,京东E卡官方,京东E卡官方,充值中,,1
|
||||
250106103941456562,AAACuXAHnMZajz5k,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已退款,2025-01-06 10:39:42,2025-01-06 10:39:41,2025-01-06 10:39:43,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡官方,京东E卡官方,充值失败,,1
|
||||
250106104017226391,AAACuWBBhffLv53H,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已支付,2025-01-06 10:40:18,2025-01-06 10:40:17,2025-01-06 10:40:18,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票发送,58.0000,58.0000,京东E卡官方,京东E卡官方,已完成,,1
|
||||
250106103834281327,AAACuZALThk42qNk,,直充卡密,,10.0000,1,10.00,0.00,支付宝,已支付,2025-01-06 10:38:35,2025-01-06 10:38:34,2025-01-06 10:38:35,京东E卡测试-优惠券,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡专票发送,京东E卡官方发送,已完成,,1
|
||||
250106103910596600,AAACuYBQCvrXSePD,,直充卡密,223232,3.0000,1,3.00,0.00,支付宝,已支付,2025-01-06 10:39:11,2025-01-06 10:39:10,2025-01-06 10:39:12,京东E卡测试-优惠券,京东E卡分销商,爱奇艺黄金会员天卡,6.0000,2.0580,京东E卡专票发送,京东E卡官方发送,充值中,,1
|
||||
250106103941456562,AAACuXAHnMZajz5k,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已退款,2025-01-06 10:39:42,2025-01-06 10:39:41,2025-01-06 10:39:43,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡专票发送,京东E卡官方发送,充值失败,,1
|
||||
250106104017226391,AAACuWBBhffLv53H,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已支付,2025-01-06 10:40:18,2025-01-06 10:40:17,2025-01-06 10:40:18,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票发送,58.0000,58.0000,京东E卡专票发送,京东E卡官方发送,已完成,,1
|
||||
250106103834281327,AAACuZALThk42qNk,,直充卡密,,10.0000,1,10.00,0.00,支付宝,已支付,2025-01-06 10:38:35,2025-01-06 10:38:34,2025-01-06 10:38:35,京东E卡测试-优惠券,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡专票不发送,京东E卡官方不发送,已完成,,1
|
||||
250106103910596600,AAACuYBQCvrXSePD,,直充卡密,223232,3.0000,1,3.00,0.00,支付宝,已支付,2025-01-06 10:39:11,2025-01-06 10:39:10,2025-01-06 10:39:12,京东E卡测试-优惠券,京东E卡分销商,爱奇艺黄金会员天卡,6.0000,2.0580,京东E卡专票不发送,京东E卡官方不发送,充值中,,1
|
||||
250106103941456562,AAACuXAHnMZajz5k,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已退款,2025-01-06 10:39:42,2025-01-06 10:39:41,2025-01-06 10:39:43,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡专票不发送,京东E卡官方不发送,充值失败,,1
|
||||
250106104017226391,AAACuWBBhffLv53H,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已支付,2025-01-06 10:40:18,2025-01-06 10:40:17,2025-01-06 10:40:18,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票发送,58.0000,58.0000,京东E卡专票不发送,京东E卡官方不发送,已完成,,1
|
||||
250106103834281327,AAACuZALThk42qNk,,直充卡密,,10.0000,1,10.00,0.00,支付宝,已支付,2025-01-06 10:38:35,2025-01-06 10:38:34,2025-01-06 10:38:35,京东E卡测试-优惠券,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,直充,直充,已完成,,1
|
||||
250106103910596600,AAACuYBQCvrXSePD,,直充卡密,223232,3.0000,1,3.00,0.00,支付宝,已支付,2025-01-06 10:39:11,2025-01-06 10:39:10,2025-01-06 10:39:12,京东E卡测试-优惠券,京东E卡分销商,爱奇艺黄金会员天卡,6.0000,2.0580,直充,直充,充值中,,1
|
||||
250106103941456562,AAACuXAHnMZajz5k,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已退款,2025-01-06 10:39:42,2025-01-06 10:39:41,2025-01-06 10:39:43,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,直充,直充,充值失败,,1
|
||||
250106104017226391,AAACuWBBhffLv53H,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已支付,2025-01-06 10:40:18,2025-01-06 10:40:17,2025-01-06 10:40:18,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票发送,58.0000,58.0000,直充,直充,已完成,,1
|
||||
250106103834281327,AAACuZALThk42qNk,,直充卡密,,10.0000,1,10.00,0.00,支付宝,已支付,2025-01-06 10:38:35,2025-01-06 10:38:34,2025-01-06 10:38:35,京东E卡测试-优惠券,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,卡密,卡密,已完成,,1
|
||||
250106103910596600,AAACuYBQCvrXSePD,,直充卡密,223232,3.0000,1,3.00,0.00,支付宝,已支付,2025-01-06 10:39:11,2025-01-06 10:39:10,2025-01-06 10:39:12,京东E卡测试-优惠券,京东E卡分销商,爱奇艺黄金会员天卡,6.0000,2.0580,卡密,卡密,充值中,,1
|
||||
250106103941456562,AAACuXAHnMZajz5k,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已退款,2025-01-06 10:39:42,2025-01-06 10:39:41,2025-01-06 10:39:43,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,卡密,卡密,充值失败,,1
|
||||
250106104017226391,AAACuWBBhffLv53H,,直充卡密,15708432566,60.0000,1,60.00,0.00,支付宝,已支付,2025-01-06 10:40:18,2025-01-06 10:40:17,2025-01-06 10:40:18,京东E卡测试-优惠券,京东E卡分销商,浦上京东5元测试-专票发送,58.0000,58.0000,卡密,卡密,已完成,,1
|
||||
250103164229642269,AAACuPACtaMPwKBp,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:42:30,2025-01-03 16:42:29,2025-01-03 16:42:31,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值中,,2
|
||||
250103164650404884,AAACuPAHVMAYkT63,,直充卡密,15708432566,20.0000,1,20.00,,,待支付,2025-01-03 16:46:51,2025-01-03 16:46:50,2025-01-03 16:46:51,京东E卡测试,京东E卡分销商,QQ音乐绿钻月卡-专票-不发送,15.0000,13.5000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值中,,2
|
||||
250103171035788837,AAACuPAKn6v2S2Bp,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:10:35,2025-01-03 17:10:35,2025-01-03 17:10:36,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值中,,2
|
||||
250103172134180099,AAACuPArryhAGAdQ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:21:34,2025-01-03 17:21:34,2025-01-03 17:21:35,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值中,,2
|
||||
250103175142703803,AAACuSAMDKB2Fu8e,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-03 17:51:42,2025-01-03 17:51:42,2025-01-03 17:51:43,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值中,,2
|
||||
250103175429572077,AAACuTBCCRxPmExj,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-03 17:54:30,2025-01-03 17:54:29,2025-01-03 17:54:31,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-发送_2,京东E卡-专票-发送,已完成,,2
|
||||
250103175544562999,AAACuUAV3Ajdsnbn,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-03 17:55:45,2025-01-03 17:55:44,2025-01-03 17:55:45,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-发送_2,京东E卡-专票-发送,已完成,,2
|
||||
250106101536991230,AAACuSAcPQNh8K2V,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:15:37,2025-01-06 10:15:36,2025-01-06 10:15:37,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值失败,,2
|
||||
250106103054476637,AAACuUAsSmJXNTfY,,直充卡密,,10.0000,1,10.00,,,待支付,2025-01-06 10:30:56,2025-01-06 10:30:54,2025-01-06 10:30:56,京东E卡测试,京东E卡分销商,爱奇艺月卡-卡密,20.0000,7.9200,京东E卡_专票-发送_2,京东E卡-专票-发送,已完成,,2
|
||||
250106103112499133,AAACuTBQeBzFCQaB,,直充卡密,15708432566,50.0000,1,50.00,,,待支付,2025-01-06 10:31:13,2025-01-06 10:31:12,2025-01-06 10:31:13,京东E卡测试,京东E卡分销商,爱奇艺黄金会员季卡,58.0000,30.7400,京东E卡_专票-发送_2,京东E卡-专票-发送,已完成,,2
|
||||
250106104636225054,AAACuQDZNxmL7rSJ,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:46:37,2025-01-06 10:46:36,2025-01-06 10:46:37,京东E卡测试,京东E卡分销商,浦上京东5元测试,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,已完成,,2
|
||||
250106105015944536,AAACuSBqp3bfNRrU,,直充卡密,15708432566,60.0000,1,60.00,,,待支付,2025-01-06 10:50:16,2025-01-06 10:50:15,2025-01-06 10:50:16,京东E卡测试,京东E卡分销商,浦上京东5元测试-专票不发送,58.0000,58.0000,京东E卡_专票-发送_2,京东E卡-专票-发送,充值失败,,2
|
||||
250619175029989823,AAACuuADfSqWMGXa,,直充卡密,583989020@qq.com,1.0000,1,1.00,0.01,支付宝,待支付,,2025-06-19 17:50:29,2025-06-19 17:50:29,优惠券0619001,PT分销商,爱奇艺黄金会员天卡,6.0000,2.0580,121212121,12121,已取消,,1
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -126,13 +126,7 @@
|
|||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据权限" required show-message prop="permissionMode">
|
||||
<el-select v-model="form.permissionMode" style="width:160px">
|
||||
<el-option label="所有" value="all" />
|
||||
<el-option label="按创建者" value="creator" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.permissionMode==='creator'" label="创建者列表" :required="true" show-message prop="creatorRaw"><el-input v-model="form.creatorRaw" placeholder="如:1,2,3" /></el-input></el-form-item>
|
||||
|
||||
|
||||
<el-row :gutter="8">
|
||||
<el-col :span="12">
|
||||
|
|
@ -205,7 +199,7 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="可见性">
|
||||
<el-select v-model="edit.visibility" clearable :teleported="false" style="width:160px" placeholder="请选择">
|
||||
<el-select v-model="form.visibility" clearable :disabled="hasUserId" :teleported="false" style="width:160px" placeholder="请选择">
|
||||
<el-option v-for="opt in visibilityOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -233,7 +227,7 @@
|
|||
<el-row :gutter="8" v-if="isOrder">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="创建者" prop="creator">
|
||||
<el-select v-model="exportForm.creatorIds" multiple filterable :teleported="false" placeholder="请选择创建者" style="width:100%">
|
||||
<el-select v-model="exportForm.creatorIds" multiple filterable :disabled="hasUserId" :teleported="false" placeholder="请选择创建者" style="width:100%">
|
||||
<el-option v-for="opt in creatorOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -248,36 +242,14 @@
|
|||
</el-row>
|
||||
<el-row :gutter="8" v-if="isOrder">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="计划ID" prop="planId">
|
||||
<el-input v-model.number="exportForm.planId" :disabled="!hasReseller" placeholder="plan_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="KEY批次ID" prop="keyBatchId">
|
||||
<el-input v-model.number="exportForm.keyBatchId" :disabled="!hasPlan" placeholder="key_batch_id" />
|
||||
<el-form-item label="计划" prop="planId">
|
||||
<el-select v-model="exportForm.planId" :disabled="!hasReseller" :teleported="false" filterable placeholder="选择计划">
|
||||
<el-option v-for="opt in planOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="8" v-if="isOrder">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="兑换批次ID" prop="codeBatchId">
|
||||
<el-input v-model.number="exportForm.codeBatchId" :disabled="!hasKeyBatch" placeholder="code_batch_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="商品ID" prop="productId">
|
||||
<el-input v-model.number="exportForm.productId" :disabled="!hasCodeBatch" placeholder="product_id" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="8">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="支付流水号" prop="outTradeNo"><el-input v-model="exportForm.outTradeNo" placeholder="out_trade_no" /></el-input></el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="账户" prop="account"><el-input v-model="exportForm.account" placeholder="account" /></el-input></el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row :gutter="8" v-if="isOrder">
|
||||
<el-col :span="12" v-if="exportType===3">
|
||||
|
|
@ -291,9 +263,6 @@
|
|||
<el-col :span="12" v-if="exportType===2">
|
||||
<el-form-item label="立减金批次(批次表)" prop="voucherBatchChannelActivityId"><el-input v-model="exportForm.voucherBatchChannelActivityId" placeholder="voucher_batch.channel_activity_id" /></el-input></el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="exportType===1">
|
||||
<el-form-item label="商户业务号" prop="outBizNo"><el-input v-model="exportForm.outBizNo" placeholder="merchant_key_send.out_biz_no" /></el-input></el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 输出格式按模板设置,不在此显示 -->
|
||||
|
|
|
|||
76
web/main.js
76
web/main.js
|
|
@ -36,6 +36,16 @@ const { createApp, reactive } = Vue;
|
|||
})
|
||||
|
||||
const API_BASE = 'http://localhost:8077'
|
||||
const getUserId = ()=>{
|
||||
const sp = new URLSearchParams(window.location.search||'')
|
||||
const v = sp.get('userId') || sp.get('userid') || sp.get('user_id')
|
||||
return v && String(v).trim() ? String(v).trim() : ''
|
||||
}
|
||||
const qsUser = ()=>{
|
||||
const uid = getUserId()
|
||||
return uid ? ('?userId=' + encodeURIComponent(uid)) : ''
|
||||
}
|
||||
const hasUserId = Vue.computed(()=> !!getUserId())
|
||||
const FIELDS_MAP = {
|
||||
marketing: {
|
||||
order: [
|
||||
|
|
@ -48,8 +58,8 @@ const { createApp, reactive } = Vue;
|
|||
{ value: 'account', label: '账号' },
|
||||
{ value: 'product_id', label: '商品ID' },
|
||||
{ value: 'reseller_id', label: '分销商ID' },
|
||||
{ value: 'plan_id', label: '计划ID' },
|
||||
{ value: 'key_batch_id', label: 'KEY批次ID' },
|
||||
{ value: 'plan_id', label: '计划' },
|
||||
{ value: 'key_batch_id', label: 'key批次' },
|
||||
{ value: 'code_batch_id', label: '兑换批次ID' },
|
||||
{ value: 'contract_price', label: '合同单价' },
|
||||
{ value: 'num', label: '数量' },
|
||||
|
|
@ -163,8 +173,8 @@ const { createApp, reactive } = Vue;
|
|||
{ value: 'account', label: '账号' },
|
||||
{ value: 'product_id', label: '商品ID' },
|
||||
{ value: 'reseller_id', label: '分销商ID' },
|
||||
{ value: 'plan_id', label: '计划ID' },
|
||||
{ value: 'key_batch_id', label: 'KEY批次ID' },
|
||||
{ value: 'plan_id', label: '计划' },
|
||||
{ value: 'key_batch_id', label: 'key批次' },
|
||||
{ value: 'code_batch_id', label: '兑换批次ID' },
|
||||
{ value: 'contract_price', label: '合同单价' },
|
||||
{ value: 'num', label: '数量' },
|
||||
|
|
@ -273,7 +283,7 @@ const { createApp, reactive } = Vue;
|
|||
order_cash: '红包订单',
|
||||
order_voucher: '立减金订单',
|
||||
plan: '活动计划',
|
||||
key_batch: 'KEY批次',
|
||||
key_batch: 'key批次',
|
||||
code_batch: '兑换码批次',
|
||||
voucher: '立减金',
|
||||
voucher_batch: '立减金批次',
|
||||
|
|
@ -389,8 +399,6 @@ const { createApp, reactive } = Vue;
|
|||
main_table: [{ required: true, message: '请选择导出场景', trigger: 'change' }],
|
||||
orderType: [{ required: true, message: '请选择订单类型', trigger: 'change' }],
|
||||
fieldsSel: [{ validator: (_rule, val, cb)=>{ if(Array.isArray(val) && val.length>0){ cb() } else { cb(new Error('请至少选择一个字段')) } }, trigger: 'change' }],
|
||||
permissionMode: [{ required: true, message: '请选择数据权限', trigger: 'change' }],
|
||||
creatorRaw: [{ validator: (_r, v, cb)=>{ if(state.form.permissionMode==='creator'){ if(String(v||'').trim()) cb(); else cb(new Error('请输入创建者列表')) } else cb() }, trigger: 'blur' }],
|
||||
file_format: [{ required: true, message: '请选择输出格式', trigger: 'change' }],
|
||||
visibility: [{ required: true, message: '请选择可见性', trigger: 'change' }]
|
||||
}
|
||||
|
|
@ -465,6 +473,7 @@ const { createApp, reactive } = Vue;
|
|||
}
|
||||
const creatorOptions = Vue.ref([])
|
||||
const resellerOptions = Vue.ref([])
|
||||
const planOptions = Vue.ref([])
|
||||
const hasCreators = Vue.computed(()=> Array.isArray(state.exportForm.creatorIds) && state.exportForm.creatorIds.length>0 )
|
||||
const hasReseller = Vue.computed(()=> !!state.exportForm.resellerId)
|
||||
const hasPlan = Vue.computed(()=> !!state.exportForm.planId)
|
||||
|
|
@ -488,6 +497,18 @@ const { createApp, reactive } = Vue;
|
|||
resellerOptions.value = arr.map(it=>({label: (it.name||'') + (it.name?'':'') , value: Number(it.id)}))
|
||||
}catch(_e){ resellerOptions.value = [] }
|
||||
}
|
||||
const loadPlans = async ()=>{
|
||||
const rid = state.exportForm.resellerId
|
||||
if(!rid){ planOptions.value = []; return }
|
||||
try{
|
||||
const qs = new URLSearchParams()
|
||||
qs.set('reseller', String(rid))
|
||||
const res = await fetch(API_BASE + '/api/plans?' + qs.toString())
|
||||
const data = await res.json()
|
||||
const arr = Array.isArray(data?.data) ? data.data : (Array.isArray(data) ? data : [])
|
||||
planOptions.value = arr.map(it=>({ label: `${it.id} - ${it.title||''}`, value: Number(it.id) }))
|
||||
}catch(_e){ planOptions.value = [] }
|
||||
}
|
||||
const exportType = Vue.computed(()=>{
|
||||
const f = state.exportTpl && state.exportTpl.filters
|
||||
if(!f) return null
|
||||
|
|
@ -542,7 +563,7 @@ const { createApp, reactive } = Vue;
|
|||
}
|
||||
const loadTemplates = async ()=>{
|
||||
try{
|
||||
const res = await fetch(API_BASE + '/api/templates');
|
||||
const res = await fetch(API_BASE + '/api/templates' + qsUser());
|
||||
if(!res.ok){
|
||||
msg('加载模板失败','error');
|
||||
state.templates = []
|
||||
|
|
@ -563,7 +584,7 @@ const { createApp, reactive } = Vue;
|
|||
qs.set('page', String(page))
|
||||
qs.set('page_size', String(state.jobsPageSize))
|
||||
if(state.jobsTplId){ qs.set('template_id', String(state.jobsTplId)) }
|
||||
const res = await fetch(API_BASE + '/api/exports?' + qs.toString());
|
||||
const res = await fetch(API_BASE + '/api/exports?' + qs.toString() + (qsUser()?('&'+qsUser().slice(1)):'') );
|
||||
if(!res.ok){ state.jobs = []; return }
|
||||
const data = await res.json();
|
||||
const payload = data?.data || data || {}
|
||||
|
|
@ -627,9 +648,10 @@ const { createApp, reactive } = Vue;
|
|||
fields,
|
||||
filters: { type_eq: Number(state.form.orderType) },
|
||||
file_format: state.form.file_format,
|
||||
visibility: state.form.visibility
|
||||
visibility: state.form.visibility,
|
||||
owner_id: (getUserId()? Number(getUserId()) : (state.form.visibility==='public'? 0 : 0))
|
||||
}
|
||||
const res = await fetch(API_BASE + '/api/templates',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
|
||||
const res = await fetch(API_BASE + '/api/templates' + qsUser(),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
|
||||
if(res.ok){ msg('创建成功'); state.createVisible=false; loadTemplates() } else { msg(await res.text(),'error') }
|
||||
}
|
||||
const openExport = async (row)=>{
|
||||
|
|
@ -638,6 +660,8 @@ const { createApp, reactive } = Vue;
|
|||
state.exportForm.datasource = state.exportTpl.datasource || row.datasource || 'marketing'
|
||||
state.exportForm.file_format = state.exportTpl.file_format || row.file_format || 'xlsx'
|
||||
if(state.exportForm.datasource==='marketing'){ loadCreators() }
|
||||
const uid = getUserId()
|
||||
if(uid){ state.exportForm.creatorIds = [ Number(uid) ] }
|
||||
if(!Array.isArray(state.exportForm.dateRange) || state.exportForm.dateRange.length!==2){ state.exportForm.dateRange = yearRange() }
|
||||
state.exportVisible = true
|
||||
}
|
||||
|
|
@ -659,22 +683,20 @@ const { createApp, reactive } = Vue;
|
|||
const tVal = exportType.value
|
||||
if(tVal != null){ filters.type_eq = Number(tVal) }
|
||||
if(Array.isArray(state.exportForm.dateRange) && state.exportForm.dateRange.length===2){ filters.create_time_between = [ state.exportForm.dateRange[0], state.exportForm.dateRange[1] ] }
|
||||
if(state.exportForm.outTradeNo){ filters.out_trade_no_eq = state.exportForm.outTradeNo }
|
||||
if(state.exportForm.account){ filters.account_eq = state.exportForm.account }
|
||||
|
||||
if(state.exportForm.planId){ filters.plan_id_eq = Number(state.exportForm.planId) }
|
||||
if(state.exportForm.productId){ filters.product_id_eq = Number(state.exportForm.productId) }
|
||||
|
||||
if(state.exportForm.resellerId){ filters.reseller_id_eq = Number(state.exportForm.resellerId) }
|
||||
if(state.exportForm.keyBatchId){ filters.key_batch_id_eq = Number(state.exportForm.keyBatchId) }
|
||||
if(state.exportForm.codeBatchId){ filters.code_batch_id_eq = Number(state.exportForm.codeBatchId) }
|
||||
|
||||
if(state.exportForm.cashActivityId){ filters.order_cash_cash_activity_id_eq = state.exportForm.cashActivityId }
|
||||
if(state.exportForm.voucherChannelActivityId){ filters.order_voucher_channel_activity_id_eq = state.exportForm.voucherChannelActivityId }
|
||||
if(state.exportForm.voucherBatchChannelActivityId){ filters.voucher_batch_channel_activity_id_eq = state.exportForm.voucherBatchChannelActivityId }
|
||||
if(state.exportForm.outBizNo){ filters.merchant_out_biz_no_eq = state.exportForm.outBizNo }
|
||||
|
||||
if(Array.isArray(state.exportForm.creatorIds) && state.exportForm.creatorIds.length){ filters.creator_in = state.exportForm.creatorIds.map(Number) }
|
||||
else if(state.exportForm.creatorIdsRaw){ const arr = String(state.exportForm.creatorIdsRaw).split(',').map(s=>s.trim()).filter(Boolean); if(arr.length){ filters.creator_in = arr } }
|
||||
|
||||
const payload={template_id:Number(id),requested_by:1,permission:{},options:{},filters, file_format: state.exportForm.file_format, datasource: state.exportForm.datasource};
|
||||
const r=await fetch(API_BASE + '/api/exports',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
|
||||
const r=await fetch(API_BASE + '/api/exports' + qsUser(),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
|
||||
const j=await r.json();
|
||||
const jid = j?.data?.id ?? j?.id
|
||||
state.exportVisible=false
|
||||
|
|
@ -686,7 +708,7 @@ const { createApp, reactive } = Vue;
|
|||
} else { msg('任务创建返回异常','error') }
|
||||
}
|
||||
Vue.watch(()=>state.exportForm.creatorIds, ()=>{ state.exportForm.resellerId=null; state.exportForm.planId=null; state.exportForm.keyBatchId=null; state.exportForm.codeBatchId=null; state.exportForm.productId=null; loadResellers() })
|
||||
Vue.watch(()=>state.exportForm.resellerId, ()=>{ state.exportForm.planId=null; state.exportForm.keyBatchId=null; state.exportForm.codeBatchId=null; state.exportForm.productId=null })
|
||||
Vue.watch(()=>state.exportForm.resellerId, ()=>{ state.exportForm.planId=null; state.exportForm.keyBatchId=null; state.exportForm.codeBatchId=null; state.exportForm.productId=null; loadPlans() })
|
||||
Vue.watch(()=>state.exportForm.planId, ()=>{ state.exportForm.keyBatchId=null; state.exportForm.codeBatchId=null; state.exportForm.productId=null })
|
||||
Vue.watch(()=>state.exportForm.keyBatchId, ()=>{ state.exportForm.codeBatchId=null; state.exportForm.productId=null })
|
||||
Vue.watch(()=>state.exportForm.codeBatchId, ()=>{ state.exportForm.productId=null })
|
||||
|
|
@ -818,8 +840,22 @@ const { createApp, reactive } = Vue;
|
|||
}
|
||||
loadTemplates()
|
||||
|
||||
return { ...Vue.toRefs(state), visibilityOptions, formatOptions, datasourceOptions, fieldOptions, editFieldOptions, loadTemplates, createTemplate, openExport, submitExport, loadJob, loadJobs, openJobs, closeJobs, download, openSQL, openEdit, saveEdit, removeTemplate, resizeDialog, createRules, exportRules, editRules, createFormRef, exportFormRef, editFormRef, dsLabel, exportType, isOrder, exportTitle, creatorOptions, resellerOptions, hasCreators, hasReseller, hasPlan, hasKeyBatch, hasCodeBatch, jobPercent, fmtDT, fieldsCascader, editFieldsCascader, createCascaderRoot, editCascaderRoot, onCascaderVisible, onFieldsSelChange }
|
||||
return { ...Vue.toRefs(state), visibilityOptions, formatOptions, datasourceOptions, fieldOptions, editFieldOptions, loadTemplates, createTemplate, openExport, submitExport, loadJob, loadJobs, openJobs, closeJobs, download, openSQL, openEdit, saveEdit, removeTemplate, resizeDialog, createRules, exportRules, editRules, createFormRef, exportFormRef, editFormRef, dsLabel, exportType, isOrder, exportTitle, creatorOptions, resellerOptions, planOptions, hasCreators, hasReseller, hasPlan, hasKeyBatch, hasCodeBatch, jobPercent, fmtDT, fieldsCascader, editFieldsCascader, createCascaderRoot, editCascaderRoot, onCascaderVisible, onFieldsSelChange, hasUserId }
|
||||
}
|
||||
})
|
||||
app.use(ElementPlus)
|
||||
app.mount('#app')
|
||||
const DEFAULT_FIELDS = {
|
||||
marketing: 'order_number,creator,out_trade_no,type,status,contract_price,num,total,pay_amount,create_time',
|
||||
ymt: 'order_number,creator,out_trade_no,type,status,contract_price,num,total,pay_amount,create_time'
|
||||
}
|
||||
Vue.watch(()=>state.form.datasource, (ds)=>{
|
||||
state.form.fieldsSel = []
|
||||
state.form.fieldsRaw = DEFAULT_FIELDS[ds] || ''
|
||||
state.form.main_table = 'order'
|
||||
state.form.orderType = 1
|
||||
})
|
||||
Vue.watch(()=>state.edit.datasource, ()=>{
|
||||
state.edit.fieldsSel = []
|
||||
state.edit.main_table = 'order'
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue