新增抖音团购核销
This commit is contained in:
parent
105ad4ee52
commit
78672a0cf9
|
|
@ -11,11 +11,14 @@ VITE_API_WSS = 'wss://cashier.sxczgkj.cn/client'
|
||||||
# 测试
|
# 测试
|
||||||
# VITE_API_URL = 'https://cashier-client.sxczgkj.cn/cashier-client'
|
# VITE_API_URL = 'https://cashier-client.sxczgkj.cn/cashier-client'
|
||||||
|
|
||||||
|
# 测试 php
|
||||||
|
VITE_API_PHP_URL = 'http://192.168.2.33:1666/index.php/api'
|
||||||
|
|
||||||
# 阿伟
|
# 阿伟
|
||||||
# VITE_API_URL = 'http://192.168.2.96:10587/cashier-client'
|
# VITE_API_URL = 'http://192.168.2.96:10587/cashier-client'
|
||||||
|
|
||||||
# 鹏辉
|
# 鹏辉
|
||||||
# VITE_API_URL = 'http://192.168.2.41:10587/cashier-client'
|
# VITE_API_URL = 'http://192.168.2.41:10589/cashier-client'
|
||||||
|
|
||||||
# 正式
|
# 正式
|
||||||
VITE_API_URL = 'https://cashierclient.sxczgkj.cn/cashier-client'
|
VITE_API_URL = 'https://cashierclient.sxczgkj.cn/cashier-client'
|
||||||
|
|
@ -2,10 +2,16 @@
|
||||||
ENV = production
|
ENV = production
|
||||||
|
|
||||||
# 正式ws
|
# 正式ws
|
||||||
VITE_API_WSS = 'wss://cashier.sxczgkj.cn/client'
|
# VITE_API_WSS = 'wss://cashier.sxczgkj.cn/client'
|
||||||
|
|
||||||
|
#测试ws
|
||||||
|
VITE_API_WSS = 'wss://wxcashiertest.sxczgkj.cn/client'
|
||||||
|
|
||||||
# 线上环境接口地址
|
# 线上环境接口地址
|
||||||
VITE_API_URL = 'https://cashierclient.sxczgkj.cn/cashier-client/'
|
VITE_API_URL = 'https://cashierclient.sxczgkj.cn/cashier-client/'
|
||||||
|
|
||||||
|
# 测试 php
|
||||||
|
VITE_API_PHP_URL = 'http://192.168.2.33:1666/index.php/api'
|
||||||
|
|
||||||
# 测试
|
# 测试
|
||||||
# VITE_API_URL = 'https://cashier-client.sxczgkj.cn/cashier-client'
|
# VITE_API_URL = 'https://cashier-client.sxczgkj.cn/cashier-client'
|
||||||
|
|
@ -1 +1,171 @@
|
||||||
"use strict";const i=require("path"),e=require("electron");let a;e.app.whenReady().then(()=>{a=new e.BrowserWindow({title:"银收客",width:1024,height:768,fullscreenable:!0,fullscreen:!process.env.VITE_DEV_SERVER_URL,simpleFullscreen:!0,frame:!!process.env.VITE_DEV_SERVER_URL,webPreferences:{nodeIntegration:!0,contextIsolation:!1}}),process.env.VITE_DEV_SERVER_URL?a.loadURL(process.env.VITE_DEV_SERVER_URL):a.loadFile(i.resolve(__dirname,"../dist/index.html")),e.app.on("activate",()=>{e.BrowserWindow.getAllWindows().length===0&&createWindow()}),e.ipcMain.on("quitHandler",(t,n)=>{e.app.quit()}),e.ipcMain.on("getPrintList",()=>{a.webContents.getPrintersAsync().then(t=>{a.webContents.send("printList",t)})});const o=new e.BrowserWindow({show:!1,width:464,height:1726,webPreferences:{nodeIntegration:!0,contextIsolation:!1}});process.env.VITE_DEV_SERVER_URL?o.loadFile(i.join(__dirname,"../public/print.html")):o.loadFile(i.resolve(__dirname,"../dist/print.html")),e.ipcMain.on("printerInfoSync",(t,n)=>{o.webContents.send("getParams",n)}),e.ipcMain.on("printStart",(t,n)=>{console.log(n);let r=JSON.parse(n).deviceName;o.webContents.print({silent:!0,deviceName:r,pageSize:{width:58e3,height:216e3},scaleFactor:80,landscape:!1,margins:{marginType:"none",top:0,bottom:0,left:0,right:0},dpi:{horizontal:203,vertical:203}})});const s=new e.BrowserWindow({show:!1,width:464,height:1726,webPreferences:{nodeIntegration:!0,contextIsolation:!1}});process.env.VITE_DEV_SERVER_URL?s.loadFile(i.join(__dirname,"../public/work_print.html")):s.loadFile(i.resolve(__dirname,"../dist/work_print.html")),e.ipcMain.on("printerWorkSync",(t,n)=>{s.webContents.send("getParams",n)}),e.ipcMain.on("printWorkStart",(t,n)=>{let r=JSON.parse(n).deviceName;s.webContents.print({silent:!0,deviceName:r,pageSize:{width:58e3,height:216e3},scaleFactor:80,landscape:!1,margins:{marginType:"none",top:0,bottom:0,left:0,right:0},dpi:{horizontal:203,vertical:203}})});const l=new e.BrowserWindow({show:!1,width:320,height:240,webPreferences:{nodeIntegration:!0,contextIsolation:!1}});process.env.VITE_DEV_SERVER_URL?l.loadFile(i.join(__dirname,"../public/tag_print.html")):l.loadFile(i.resolve(__dirname,"../dist/tag_print.html")),e.ipcMain.on("printerTagSync",(t,n)=>{console.log(n),l.webContents.send("getParams",n)}),e.ipcMain.on("printTagStart",(t,n)=>{let r=JSON.parse(n).deviceName;l.webContents.print({silent:!0,deviceName:r,pageSize:{width:4e4,height:3e4},scaleFactor:80,landscape:!1,margins:{marginType:"none",top:0,bottom:0,left:0,right:0},dpi:{horizontal:203,vertical:203}})})});e.app.on("window-all-closed",()=>{process.platform!=="darwin"&&e.app.quit()});
|
"use strict";
|
||||||
|
const path = require("path");
|
||||||
|
const electron = require("electron");
|
||||||
|
let win;
|
||||||
|
electron.app.whenReady().then(() => {
|
||||||
|
win = new electron.BrowserWindow({
|
||||||
|
title: "银收客",
|
||||||
|
width: 1024,
|
||||||
|
height: 768,
|
||||||
|
fullscreenable: true,
|
||||||
|
fullscreen: process.env.VITE_DEV_SERVER_URL ? false : true,
|
||||||
|
simpleFullscreen: true,
|
||||||
|
frame: process.env.VITE_DEV_SERVER_URL ? true : false,
|
||||||
|
webPreferences: {
|
||||||
|
// 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法
|
||||||
|
nodeIntegration: true,
|
||||||
|
contextIsolation: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (process.env.VITE_DEV_SERVER_URL) {
|
||||||
|
win.loadURL(process.env.VITE_DEV_SERVER_URL);
|
||||||
|
} else {
|
||||||
|
win.loadFile(path.resolve(__dirname, "../dist/index.html"));
|
||||||
|
}
|
||||||
|
electron.app.on("activate", () => {
|
||||||
|
if (electron.BrowserWindow.getAllWindows().length === 0) {
|
||||||
|
createWindow();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
electron.ipcMain.on("quitHandler", (_, msg) => {
|
||||||
|
electron.app.quit();
|
||||||
|
});
|
||||||
|
electron.ipcMain.on("getPrintList", () => {
|
||||||
|
win.webContents.getPrintersAsync().then((res) => {
|
||||||
|
win.webContents.send("printList", res);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const printWin = new electron.BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
width: 464,
|
||||||
|
height: 1726,
|
||||||
|
webPreferences: {
|
||||||
|
// 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法
|
||||||
|
nodeIntegration: true,
|
||||||
|
contextIsolation: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (process.env.VITE_DEV_SERVER_URL) {
|
||||||
|
printWin.loadFile(path.join(__dirname, "../public/print.html"));
|
||||||
|
} else {
|
||||||
|
printWin.loadFile(path.resolve(__dirname, "../dist/print.html"));
|
||||||
|
}
|
||||||
|
electron.ipcMain.on("printerInfoSync", (event, arg) => {
|
||||||
|
printWin.webContents.send("getParams", arg);
|
||||||
|
});
|
||||||
|
electron.ipcMain.on("printStart", (event, arg) => {
|
||||||
|
console.log(arg);
|
||||||
|
const _parmas = JSON.parse(arg);
|
||||||
|
let name = _parmas.deviceName;
|
||||||
|
printWin.webContents.print({
|
||||||
|
silent: true,
|
||||||
|
deviceName: name,
|
||||||
|
pageSize: {
|
||||||
|
width: 58e3,
|
||||||
|
height: 216e3
|
||||||
|
},
|
||||||
|
scaleFactor: 80,
|
||||||
|
landscape: false,
|
||||||
|
margins: {
|
||||||
|
marginType: "none",
|
||||||
|
top: 0,
|
||||||
|
bottom: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0
|
||||||
|
},
|
||||||
|
dpi: {
|
||||||
|
horizontal: 203,
|
||||||
|
vertical: 203
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const workPrintWin = new electron.BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
width: 464,
|
||||||
|
height: 1726,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
contextIsolation: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (process.env.VITE_DEV_SERVER_URL) {
|
||||||
|
workPrintWin.loadFile(path.join(__dirname, "../public/work_print.html"));
|
||||||
|
} else {
|
||||||
|
workPrintWin.loadFile(path.resolve(__dirname, "../dist/work_print.html"));
|
||||||
|
}
|
||||||
|
electron.ipcMain.on("printerWorkSync", (event, arg) => {
|
||||||
|
workPrintWin.webContents.send("getParams", arg);
|
||||||
|
});
|
||||||
|
electron.ipcMain.on("printWorkStart", (event, arg) => {
|
||||||
|
const _parmas = JSON.parse(arg);
|
||||||
|
let name = _parmas.deviceName;
|
||||||
|
workPrintWin.webContents.print({
|
||||||
|
silent: true,
|
||||||
|
deviceName: name,
|
||||||
|
pageSize: {
|
||||||
|
width: 58e3,
|
||||||
|
height: 216e3
|
||||||
|
},
|
||||||
|
scaleFactor: 80,
|
||||||
|
landscape: false,
|
||||||
|
margins: {
|
||||||
|
marginType: "none",
|
||||||
|
top: 0,
|
||||||
|
bottom: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0
|
||||||
|
},
|
||||||
|
dpi: {
|
||||||
|
horizontal: 203,
|
||||||
|
vertical: 203
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const tagPrintWin = new electron.BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
width: 320,
|
||||||
|
height: 240,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
contextIsolation: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (process.env.VITE_DEV_SERVER_URL) {
|
||||||
|
tagPrintWin.loadFile(path.join(__dirname, "../public/tag_print.html"));
|
||||||
|
} else {
|
||||||
|
tagPrintWin.loadFile(path.resolve(__dirname, "../dist/tag_print.html"));
|
||||||
|
}
|
||||||
|
electron.ipcMain.on("printerTagSync", (event, arg) => {
|
||||||
|
console.log(arg);
|
||||||
|
tagPrintWin.webContents.send("getParams", arg);
|
||||||
|
});
|
||||||
|
electron.ipcMain.on("printTagStart", (event, arg) => {
|
||||||
|
const _parmas = JSON.parse(arg);
|
||||||
|
let name = _parmas.deviceName;
|
||||||
|
tagPrintWin.webContents.print({
|
||||||
|
silent: true,
|
||||||
|
deviceName: name,
|
||||||
|
pageSize: {
|
||||||
|
width: 4e4,
|
||||||
|
height: 3e4
|
||||||
|
},
|
||||||
|
scaleFactor: 80,
|
||||||
|
landscape: false,
|
||||||
|
margins: {
|
||||||
|
marginType: "none",
|
||||||
|
top: 0,
|
||||||
|
bottom: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0
|
||||||
|
},
|
||||||
|
dpi: {
|
||||||
|
horizontal: 203,
|
||||||
|
vertical: 203
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
electron.app.on("window-all-closed", () => {
|
||||||
|
if (process.platform !== "darwin")
|
||||||
|
electron.app.quit();
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "vite-electron",
|
"name": "vite-electron",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.3.24",
|
"version": "1.3.26",
|
||||||
"main": "dist-electron/main.js",
|
"main": "dist-electron/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "chcp 65001 && vite",
|
"dev": "chcp 65001 && vite",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import request from "@/utils/request.js";
|
import request from "@/utils/request.js";
|
||||||
|
import request_php from "@/utils/request_php.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 团购卷订单列表(分页)
|
* 团购卷订单列表(分页)
|
||||||
|
|
@ -51,3 +52,70 @@ export function returnGpOrder(data) {
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 注意 抖音核销使用的请求为PHP服务 request_php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员签入
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function douyincheckIn(data) {
|
||||||
|
return request_php({
|
||||||
|
method: "post",
|
||||||
|
url: "douyin/checkIn",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 团购核销准备
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function douyinfulfilmentcertificateprepare(data) {
|
||||||
|
return request_php({
|
||||||
|
method: "post",
|
||||||
|
url: "douyin/fulfilmentcertificateprepare",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 团购核销
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function douyincertificateprepare(data) {
|
||||||
|
return request_php({
|
||||||
|
method: "post",
|
||||||
|
url: "douyin/certificateprepare",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 团购核销记录
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function douyinorderlist(data) {
|
||||||
|
return request_php({
|
||||||
|
method: "post",
|
||||||
|
url: "douyin/orderlist",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 团购核销撤销
|
||||||
|
* @param {*} data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function douyinfulfilmentcertificatecancel(data) {
|
||||||
|
return request_php({
|
||||||
|
method: "post",
|
||||||
|
url: "douyin/fulfilmentcertificatecancel",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
import axios from "axios";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import useStorage from "@/utils/useStorage";
|
||||||
|
import router from "@/router";
|
||||||
|
|
||||||
|
const service = axios.create({
|
||||||
|
baseURL:
|
||||||
|
import.meta.env.MODE == "development"
|
||||||
|
? "/php/"
|
||||||
|
: import.meta.env.VITE_API_URL,
|
||||||
|
// withCredentials: true, // 跨域请求时发送 cookies
|
||||||
|
timeout: 5000, // 请求超时
|
||||||
|
});
|
||||||
|
|
||||||
|
// 请求拦截器
|
||||||
|
service.interceptors.request.use(
|
||||||
|
(config) => {
|
||||||
|
// 在发送请求之前做些什么 token
|
||||||
|
if (useStorage.get("douyin") && useStorage.get("douyin").token) {
|
||||||
|
config.headers["bausertoken"] = useStorage.get("douyin").token;
|
||||||
|
// config.headers['Content-Type'] = 'application/json'
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
// 处理请求错误
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 响应拦截器
|
||||||
|
service.interceptors.response.use(
|
||||||
|
(response) => {
|
||||||
|
// 对响应数据做点什么
|
||||||
|
if (+response.status === 200) {
|
||||||
|
if (+response.data.code == 1) {
|
||||||
|
return response.data.data;
|
||||||
|
} else {
|
||||||
|
// 响应错误
|
||||||
|
ElMessage.error(response.data.msg);
|
||||||
|
return Promise.reject(response.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
// 对响应错误做点什么
|
||||||
|
if (error.message.indexOf("timeout") != -1) {
|
||||||
|
ElMessage.error("网络超时");
|
||||||
|
} else if (error.message == "Network Error") {
|
||||||
|
ElMessage.error("网络连接错误");
|
||||||
|
} else {
|
||||||
|
console.log(error);
|
||||||
|
if (error.response.data) ElMessage.error(error.response.statusText);
|
||||||
|
else ElMessage.error("接口路径找不到");
|
||||||
|
}
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export default service;
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="dialog">
|
<div class="dialog">
|
||||||
<el-dialog title="核销团购券" width="600" v-model="dialogVisible" @open="reset">
|
<el-dialog :title="`核销${props.title}团购券`" width="600" v-model="dialogVisible" @open="reset">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<el-image :src="icon" style="width: 60px; height: 60px"></el-image>
|
<el-image :src="icon" style="width: 60px; height: 60px"></el-image>
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog title="团购券详情" width="600" v-model="detailVisible">
|
<el-dialog title="团购券详情" width="600" v-model="detailVisible">
|
||||||
<div class="group_detil">
|
<div class="group_detil">
|
||||||
<div class="shop_info">
|
<div class="shop_info" v-if="props.type == 1">
|
||||||
<el-image :src="groupDetail.images[0]" style="width: 50px;height: 50px;"></el-image>
|
<el-image :src="groupDetail.images[0]" style="width: 50px;height: 50px;"></el-image>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<div class="name">{{ groupDetail.productName }}</div>
|
<div class="name">{{ groupDetail.productName }}</div>
|
||||||
|
|
@ -62,7 +62,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table">
|
<div class="table">
|
||||||
<el-table :data="groupDetail.productList" border>
|
<el-table :data="groupDetail.productList" border v-if="props.type == 1">
|
||||||
<el-table-column label="名称" prop="title"></el-table-column>
|
<el-table-column label="名称" prop="title"></el-table-column>
|
||||||
<el-table-column label="数量" prop="number"></el-table-column>
|
<el-table-column label="数量" prop="number"></el-table-column>
|
||||||
<el-table-column label="商品信息">
|
<el-table-column label="商品信息">
|
||||||
|
|
@ -79,6 +79,12 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
<el-table ref="douyin_table" :data="groupDetail.goods" border v-if="props.type == 2"
|
||||||
|
@selection-change="douyinSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column label="名称" prop="title"></el-table-column>
|
||||||
|
<el-table-column label="价格" prop="amount"></el-table-column>
|
||||||
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
|
|
@ -94,7 +100,7 @@
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import icon from "@/assets/icon_scan.png";
|
import icon from "@/assets/icon_scan.png";
|
||||||
import { groupOrderorderInfo, groupOrdergroupScan } from '@/api/group'
|
import { groupOrderorderInfo, groupOrdergroupScan, douyinfulfilmentcertificateprepare, douyincertificateprepare } from '@/api/group'
|
||||||
import { useUser } from "@/store/user.js";
|
import { useUser } from "@/store/user.js";
|
||||||
const store = useUser();
|
const store = useUser();
|
||||||
import {
|
import {
|
||||||
|
|
@ -107,22 +113,14 @@ import { ElMessage } from "element-plus";
|
||||||
const emits = defineEmits(["success"]);
|
const emits = defineEmits(["success"]);
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
amount: {
|
title: {
|
||||||
type: [Number, String],
|
type: String,
|
||||||
default: 0,
|
default: ''
|
||||||
},
|
},
|
||||||
selecttype: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 1
|
||||||
},
|
}
|
||||||
orderId: {
|
|
||||||
type: [Number, String],
|
|
||||||
default: "",
|
|
||||||
},
|
|
||||||
fast: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialogVisible = ref(false);
|
const dialogVisible = ref(false);
|
||||||
|
|
@ -142,10 +140,29 @@ const detailVisible = ref(false)
|
||||||
// 团购卷核销(仅核销待使用订单)
|
// 团购卷核销(仅核销待使用订单)
|
||||||
async function groupOrdergroupScanHandle() {
|
async function groupOrdergroupScanHandle() {
|
||||||
try {
|
try {
|
||||||
groupDetailLoading.value = true
|
switch (props.type) {
|
||||||
const res = await groupOrdergroupScan({
|
case 1:
|
||||||
id: groupDetail.value.id
|
{
|
||||||
})
|
groupDetailLoading.value = true
|
||||||
|
const res = await groupOrdergroupScan({
|
||||||
|
id: groupDetail.value.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
groupDetailLoading.value = true
|
||||||
|
let encrypted_codes = groupDetail.value.goods.map(item => item.encrypted_code)
|
||||||
|
const res = await douyincertificateprepare({
|
||||||
|
verify_token: groupDetail.value.verify_token,
|
||||||
|
encrypted_codes: encrypted_codes.join(','),
|
||||||
|
id: groupDetail.value.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
groupDetailLoading.value = false
|
groupDetailLoading.value = false
|
||||||
detailVisible.value = false
|
detailVisible.value = false
|
||||||
scanCode.value = ''
|
scanCode.value = ''
|
||||||
|
|
@ -158,16 +175,46 @@ async function groupOrdergroupScanHandle() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交扫码支付
|
const douyin_table = ref(null)
|
||||||
|
|
||||||
|
// 选择要核销的券
|
||||||
|
function douyinSelectionChange(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 核销券码
|
||||||
async function submitHandle() {
|
async function submitHandle() {
|
||||||
try {
|
try {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const res = await groupOrderorderInfo({
|
switch (props.type) {
|
||||||
coupon: scanCode.value,
|
case 1:
|
||||||
});
|
{
|
||||||
loading.value = false
|
const res = await groupOrderorderInfo({
|
||||||
groupDetail.value = res
|
coupon: scanCode.value,
|
||||||
detailVisible.value = true
|
});
|
||||||
|
loading.value = false
|
||||||
|
groupDetail.value = res
|
||||||
|
detailVisible.value = true
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
const res = await douyinfulfilmentcertificateprepare({
|
||||||
|
object_id: decodeURI(scanCode.value),
|
||||||
|
});
|
||||||
|
loading.value = false
|
||||||
|
groupDetail.value = res
|
||||||
|
detailVisible.value = true
|
||||||
|
setTimeout(() => {
|
||||||
|
groupDetail.value.goods.map(item => {
|
||||||
|
douyin_table.value.toggleRowSelection(item)
|
||||||
|
})
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,10 @@
|
||||||
<div class="cart_wrap card">
|
<div class="cart_wrap card">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
|
<el-select v-model="tableData.type" placeholder="核销类型">
|
||||||
|
<el-option v-for="item in typeList" :key="item.value" :value="item.value"
|
||||||
|
:label="item.label"></el-option>
|
||||||
|
</el-select>
|
||||||
<el-input placeholder="搜索订单" v-model="tableData.proName" @focus="
|
<el-input placeholder="搜索订单" v-model="tableData.proName" @focus="
|
||||||
global.updateData(false)" @blur="global.updateData(true)"></el-input>
|
global.updateData(false)" @blur="global.updateData(true)"></el-input>
|
||||||
<el-select v-model="tableData.status" placeholder="订单状态">
|
<el-select v-model="tableData.status" placeholder="订单状态">
|
||||||
|
|
@ -15,10 +19,11 @@
|
||||||
@click="resetHandle">重置</el-button>
|
@click="resetHandle">重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button type="warning" :icon="MagicStick" @click="scanGroupRef.show()">核销团购券</el-button>
|
<el-button type="warning" :icon="FullScreen" @click="scanGroupRef.show()">核销团购券</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab_container">
|
<div class="tab_container">
|
||||||
<el-table :data="tableData.list" height="540px" v-loading="tableData.loading">
|
<el-table :data="tableData.list" height="540px" v-loading="tableData.loading"
|
||||||
|
v-if="tableData.type == 1">
|
||||||
<el-table-column label="订单号" prop="orderNo" width="100px"></el-table-column>
|
<el-table-column label="订单号" prop="orderNo" width="100px"></el-table-column>
|
||||||
<el-table-column label="优惠卷" prop="proImg" width="200px">
|
<el-table-column label="优惠卷" prop="proImg" width="200px">
|
||||||
<template v-slot="scope">
|
<template v-slot="scope">
|
||||||
|
|
@ -62,6 +67,38 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
<el-table :data="tableData.list" height="540px" v-loading="tableData.loading"
|
||||||
|
v-if="tableData.type == 2">
|
||||||
|
<el-table-column label="抖音订单号" prop="d_order_id" width="240"></el-table-column>
|
||||||
|
<el-table-column label="总金额" prop="pay_amount" width="100">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<span style="color: var(--primary-color);">¥{{ scope.row.pay_amount }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="商品信息" prop="douyinCodeGoods">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<div class="goods_list">
|
||||||
|
<div class="row" v-for="item in scope.row.douyinCodeGoods" :key="item.id">
|
||||||
|
<div class="item" style="flex: 1;white-space: nowrap;margin-right: 10px;">
|
||||||
|
{{ item.title }}
|
||||||
|
</div>
|
||||||
|
<div class="item" style="flex: 1;margin-right: 10px;color: var(--primary-color);">
|
||||||
|
¥{{ item.pay_amount }}
|
||||||
|
</div>
|
||||||
|
<div class="item" style="margin-right: 10px;">
|
||||||
|
<el-tag type="success" disable-transitions size="default" effect="light" round>
|
||||||
|
{{ item.status_text }}
|
||||||
|
</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="item" style="flex: 1;display: flex;justify-content: flex-end;">
|
||||||
|
<el-button type="danger" size="small" v-if="item.is_show_cacel_banner"
|
||||||
|
@click="cacelDouyinHandle(item)">撤销</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<div class="pagination">
|
<div class="pagination">
|
||||||
<el-pagination @current-change="paginationChange" :current-page="tableData.page"
|
<el-pagination @current-change="paginationChange" :current-page="tableData.page"
|
||||||
|
|
@ -70,14 +107,16 @@
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<scanGroup ref="scanGroupRef" @succcess="groupOrderlistAjax" />
|
<scanGroup ref="scanGroupRef" :title="typeList.find(item => item.value == tableData.type).label"
|
||||||
|
:type="tableData.type" @succcess="groupOrderlistAjax" />
|
||||||
<refundDialog ref="refundDialogRef" @success="groupOrderlistAjax" />
|
<refundDialog ref="refundDialogRef" @success="groupOrderlistAjax" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { groupOrderlist } from '@/api/group'
|
import { groupOrderlist, douyinorderlist, douyinfulfilmentcertificatecancel } from '@/api/group'
|
||||||
import { Search, RefreshRight, MagicStick } from '@element-plus/icons-vue'
|
import { Search, RefreshRight, FullScreen } from '@element-plus/icons-vue'
|
||||||
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
||||||
import { ref, onMounted, reactive } from 'vue'
|
import { ref, onMounted, reactive } from 'vue'
|
||||||
import scanGroup from './components/scanGroup.vue'
|
import scanGroup from './components/scanGroup.vue'
|
||||||
import refundDialog from './components/refundDialog.vue'
|
import refundDialog from './components/refundDialog.vue'
|
||||||
|
|
@ -93,6 +132,7 @@ const refundDialogRef = ref(null)
|
||||||
const tableData = reactive({
|
const tableData = reactive({
|
||||||
resetLoading: false,
|
resetLoading: false,
|
||||||
proName: '',
|
proName: '',
|
||||||
|
type: 2,
|
||||||
status: '',
|
status: '',
|
||||||
loading: false,
|
loading: false,
|
||||||
list: [],
|
list: [],
|
||||||
|
|
@ -110,6 +150,18 @@ function payTypeFilter(t) {
|
||||||
return m[t]
|
return m[t]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 订单类型
|
||||||
|
const typeList = reactive([
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: '自营'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 2,
|
||||||
|
label: '抖音'
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
const statusList = reactive([
|
const statusList = reactive([
|
||||||
{
|
{
|
||||||
value: 'unpaid',
|
value: 'unpaid',
|
||||||
|
|
@ -157,21 +209,50 @@ function resetHandle() {
|
||||||
groupOrderlistAjax()
|
groupOrderlistAjax()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 显示团购核销撤销
|
||||||
|
function cacelDouyinHandle(item) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'是否撤销该团购?',
|
||||||
|
'注意').then(async () => {
|
||||||
|
await douyinfulfilmentcertificatecancel({ verify_id: item.verify_id, certificate_id: item.certificate_id })
|
||||||
|
ElMessage.success('撤销成功')
|
||||||
|
groupOrderlistAjax()
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
// 获取团购订单数据
|
// 获取团购订单数据
|
||||||
async function groupOrderlistAjax() {
|
async function groupOrderlistAjax() {
|
||||||
try {
|
try {
|
||||||
tableData.loading = true
|
tableData.loading = true
|
||||||
const res = await groupOrderlist({
|
let res = ''
|
||||||
shopId: store.userInfo.shopId,
|
switch (tableData.type) {
|
||||||
proName: tableData.proName,
|
case 1:
|
||||||
status: tableData.status,
|
// 获取本店团购数据
|
||||||
page: tableData.page,
|
res = await groupOrderlist({
|
||||||
size: tableData.size
|
shopId: store.userInfo.shopId,
|
||||||
})
|
proName: tableData.proName,
|
||||||
tableData.resetLoading = false
|
status: tableData.status,
|
||||||
tableData.loading = false
|
page: tableData.page,
|
||||||
tableData.list = res.list
|
size: tableData.size
|
||||||
tableData.total = res.total
|
})
|
||||||
|
tableData.resetLoading = false
|
||||||
|
tableData.loading = false
|
||||||
|
tableData.list = res.list
|
||||||
|
tableData.total = res.total
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
// 获取抖音团购数据
|
||||||
|
res = await douyinorderlist({
|
||||||
|
page: tableData.page
|
||||||
|
})
|
||||||
|
tableData.resetLoading = false
|
||||||
|
tableData.loading = false
|
||||||
|
tableData.list = res.list
|
||||||
|
tableData.total = res.count
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
tableData.loading = false
|
tableData.loading = false
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|
@ -336,4 +417,15 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.goods_list {
|
||||||
|
.row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -207,6 +207,9 @@ async function clearCartHandle() {
|
||||||
masterId: masterId.value,
|
masterId: masterId.value,
|
||||||
});
|
});
|
||||||
queryCartAjax();
|
queryCartAjax();
|
||||||
|
|
||||||
|
// 清除商品所有红点
|
||||||
|
goodsRef.value.clearDot()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import packageData from '../../package.json'
|
import packageData from '../../package.json'
|
||||||
|
|
||||||
import logo from "@/assets/logo.png";
|
import logo from "@/assets/logo.png";
|
||||||
|
|
@ -58,8 +59,9 @@ import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import { reactive, ref } from "vue";
|
import { reactive, ref } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { ipcRenderer } from "electron";
|
import { ipcRenderer } from "electron";
|
||||||
|
|
||||||
import { RandomNumBoth } from '@/utils'
|
import { RandomNumBoth } from '@/utils'
|
||||||
|
import useStorage from '@/utils/useStorage'
|
||||||
|
import { douyincheckIn } from '@/api/group'
|
||||||
|
|
||||||
import { useUser } from "@/store/user.js";
|
import { useUser } from "@/store/user.js";
|
||||||
const store = useUser();
|
const store = useUser();
|
||||||
|
|
@ -106,7 +108,13 @@ const submitHandle = () => {
|
||||||
formRef.value.validate(async (valid) => {
|
formRef.value.validate(async (valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
store.userlogin(form).then((res) => {
|
store.userlogin(form).then(async (res) => {
|
||||||
|
const douyin = await douyincheckIn({
|
||||||
|
token: res.token,
|
||||||
|
loginName: res.loginName,
|
||||||
|
clientType: 'pc'
|
||||||
|
})
|
||||||
|
useStorage.set('douyin', douyin.userInfo)
|
||||||
ElMessage.success("登录成功");
|
ElMessage.success("登录成功");
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
router.replace({
|
router.replace({
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,11 @@ export default defineConfig(({ command, mode }) => {
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/api/, ""),
|
rewrite: (path) => path.replace(/^\/api/, ""),
|
||||||
},
|
},
|
||||||
|
"/php": {
|
||||||
|
target: env.VITE_API_PHP_URL,
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/php/, ""),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue