1 Commits

8 changed files with 140 additions and 66 deletions

View File

@@ -7,8 +7,8 @@ VITE_APP_BASE_API=/dev-api
# 接口地址 # 接口地址
# VITE_APP_API_URL=https://tapi.cashier.sxczgkj.cn/ # 测试 # VITE_APP_API_URL=https://tapi.cashier.sxczgkj.cn/ # 测试
# VITE_APP_API_URL=https://cashier.sxczgkj.com/ # 正式 VITE_APP_API_URL=https://cashier.sxczgkj.com/ # 正式
VITE_APP_API_URL=http://192.168.1.42/ # 本地 # VITE_APP_API_URL=http://192.168.1.42/ # 本地
VITE_APP_API_PHP_URL=http://192.168.1.42:8000 #php抖音美团测试环境 VITE_APP_API_PHP_URL=http://192.168.1.42:8000 #php抖音美团测试环境
VITE_APP_API_PHP_IMPORT_URL=http://192.168.1.42:8789 #本地php批量导入 VITE_APP_API_PHP_IMPORT_URL=http://192.168.1.42:8789 #本地php批量导入
# VITE_APP_API_PHP_IMPORT_URL=https://diftcs.sxczgkj.com #本地线上php批量导入 # VITE_APP_API_PHP_IMPORT_URL=https://diftcs.sxczgkj.com #本地线上php批量导入

View File

@@ -4,10 +4,10 @@
<el-table-column prop="shopName" align="center" label="商户名称" /> <el-table-column prop="shopName" align="center" label="商户名称" />
<el-table-column prop="staffName" align="center" label="职员名称" /> <el-table-column prop="staffName" align="center" label="职员名称" />
<el-table-column prop="orderCount" align="center" label="订单数量" /> <el-table-column prop="orderCount" align="center" label="订单数量" />
<el-table-column prop="orderTurnover" align="center" label="应交金额" /> <el-table-column prop="handAmount" align="center" label="应交金额" />
<el-table-column prop="balance" align="center" label="余额支付" /> <el-table-column prop="quickInAmount" align="center" label="快捷收款金额" />
<el-table-column prop="refundAmount" align="center" label="退款金额" /> <el-table-column prop="refundAmount" align="center" label="退款金额" />
<el-table-column prop="turnover" align="center" label="总收入" /> <el-table-column prop="handAmount" align="center" label="总收入" />
<el-table-column prop="loginTime" align="center" label="开始时间" /> <el-table-column prop="loginTime" align="center" label="开始时间" />
<el-table-column prop="handoverTime" align="center" label="交班时间" /> <el-table-column prop="handoverTime" align="center" label="交班时间" />
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">

View File

@@ -2,6 +2,7 @@ import printerApi, { type addRequest } from "@/api/account/printer";
import { options } from './config' import { options } from './config'
import type { IModalConfig } from "@/components/CURD/types"; import type { IModalConfig } from "@/components/CURD/types";
import { c } from "vite/dist/node/moduleRunnerTransport.d-CXw_Ws6P";
const modalConfig: IModalConfig<addRequest> = { const modalConfig: IModalConfig<addRequest> = {
pageName: "sys:user", pageName: "sys:user",
@@ -15,9 +16,13 @@ const modalConfig: IModalConfig<addRequest> = {
}, },
formAction: function (data) { formAction: function (data) {
let obj = { ...data } let obj = { ...data }
console.log("打印类型", data);
obj.printType = data.printType.join(',') obj.printType = data.printType.join(',')
obj.categoryIds = JSON.stringify(data.categoryIdsArr) obj.categoryIds = JSON.stringify(data.categoryIdsArr)
obj.categoryList = JSON.stringify(data.categoryIdsArr) obj.categoryList = JSON.stringify(data.categoryIdsArr)
if (data.classifyPrint == 0) {
obj.categoryIds = ''
}
// obj.categoryIds = '[' + data.categoryIdsArr.join(',') + ']' // obj.categoryIds = '[' + data.categoryIdsArr.join(',') + ']'
return printerApi.add(obj); return printerApi.add(obj);
}, },

View File

@@ -20,6 +20,9 @@ const modalConfig: IModalConfig<editRequest> = {
obj.categoryIds = JSON.stringify(data.categoryIdsArr) obj.categoryIds = JSON.stringify(data.categoryIdsArr)
obj.categoryList = JSON.stringify(data.categoryIdsArr) obj.categoryList = JSON.stringify(data.categoryIdsArr)
} }
if (data.classifyPrint == 0) {
obj.categoryIds = ''
}
return printerApi.edit(obj); return printerApi.edit(obj);
}, },
beforeSubmit(data) { beforeSubmit(data) {

View File

@@ -2,23 +2,35 @@
<div class="app-container"> <div class="app-container">
<!-- 列表 --> <!-- 列表 -->
<!-- 搜索 --> <!-- 搜索 -->
<page-search ref="searchRef" :search-config="searchConfig" @query-click="handleQueryClick" <page-search
@reset-click="handleResetClick" /> ref="searchRef"
:search-config="searchConfig"
@query-click="handleQueryClick"
@reset-click="handleResetClick"
/>
<!-- 列表 --> <!-- 列表 -->
<page-content ref="contentRef" :content-config="contentConfig" @add-click="handleAddClick" <page-content
@edit-click="handleEditClick" @export-click="handleExportClick" @search-click="handleSearchClick" ref="contentRef"
@toolbar-click="handleToolbarClick" @operat-click="handleOperatClick" @filter-change="handleFilterChange"> :content-config="contentConfig"
@add-click="handleAddClick"
@edit-click="handleEditClick"
@export-click="handleExportClick"
@search-click="handleSearchClick"
@toolbar-click="handleToolbarClick"
@operat-click="handleOperatClick"
@filter-change="handleFilterChange"
>
<template #status="scope"> <template #status="scope">
<el-tag :type="scope.row[scope.prop] == 1 ? 'success' : 'info'"> <el-tag :type="scope.row[scope.prop] == 1 ? 'success' : 'info'">
{{ scope.row[scope.prop] == 1 ? "启用" : "禁用" }} {{ scope.row[scope.prop] == 1 ? "启用" : "禁用" }}
</el-tag> </el-tag>
</template> </template>
<template #contentType="scope"> <template #contentType="scope">
{{ scope.row.contentType == 'yxyPrinter' ? "云想印" : "飞鹅" }} {{ scope.row.contentType == "yxyPrinter" ? "云想印" : "飞鹅" }}
</template> </template>
<template #subType="scope"> <template #subType="scope">
{{ scope.row.subType == 'label' ? "标签" : "小票" }} {{ scope.row.subType == "label" ? "标签" : "小票" }}
</template> </template>
<template #caozuo="scope"> <template #caozuo="scope">
{{ scope }} {{ scope }}
@@ -28,8 +40,12 @@
</template> </template>
<template #operate="scope"> <template #operate="scope">
<div v-if="scope.row.connectionType != 'USB'"> <div v-if="scope.row.connectionType != 'USB'">
<el-button @click="handleEditClick(scope.row)" icon="Edit" type="primary" link>编辑</el-button> <el-button @click="handleEditClick(scope.row)" icon="Edit" type="primary" link>
<el-button @click="handdeleteevent(scope.row)" icon="Delete" type="danger" link>删除</el-button> 编辑
</el-button>
<el-button @click="handdeleteevent(scope.row)" icon="Delete" type="danger" link>
删除
</el-button>
</div> </div>
</template> </template>
<!-- <template #mobile="scope"> <!-- <template #mobile="scope">
@@ -55,7 +71,11 @@
</page-modal> </page-modal>
<!-- 编辑 --> <!-- 编辑 -->
<page-modal ref="editModalRef" :modal-config="editModalConfig" @submit-click="handleSubmitClick"> <page-modal
ref="editModalRef"
:modal-config="editModalConfig"
@submit-click="handleSubmitClick"
>
<template #gender="scope"> <template #gender="scope">
<Dict v-model="scope.formData[scope.prop]" code="gender" v-bind="scope.attrs" /> <Dict v-model="scope.formData[scope.prop]" code="gender" v-bind="scope.attrs" />
</template> </template>
@@ -98,11 +118,11 @@ const {
onMounted(() => { onMounted(() => {
getPrinterType(); getPrinterType();
}); });
let PrinterTypeList = ref([]) let PrinterTypeList = ref([]);
// 获取商品分类 // 获取商品分类
async function getPrinterType() { async function getPrinterType() {
let res = await UserAPI.getPrinterType(); let res = await UserAPI.getPrinterType();
PrinterTypeList.value = res.records PrinterTypeList.value = res.records;
} }
function handdeleteevent(item) { function handdeleteevent(item) {
ElMessageBox.confirm("确认删除?", "警告", { ElMessageBox.confirm("确认删除?", "警告", {
@@ -114,7 +134,6 @@ function handdeleteevent(item) {
ElMessage.success("删除成功"); ElMessage.success("删除成功");
handleQueryClick(); handleQueryClick();
}); });
}); });
} }
// 新增 // 新增
@@ -127,11 +146,15 @@ async function handleEditClick(row: IObject) {
editModalRef.value?.setModalVisible(); editModalRef.value?.setModalVisible();
// 根据id获取数据进行填充 // 根据id获取数据进行填充
let data = await UserAPI.get(row.id); let data = await UserAPI.get(row.id);
data.printType = data.printType.split(','); data.printType = data.printType.split(",");
if (data.categoryIds) { if (data.categoryIds) {
data.categoryIdsArr = JSON.parse(data.categoryIds) data.categoryIdsArr = JSON.parse(data.categoryIds);
} else {
data.categoryIdsArr = [];
} }
console.log(data.categoryIdsArr);
console.log(data);
data.classifyPrint = data.classifyPrint * 1; data.classifyPrint = data.classifyPrint * 1;

View File

@@ -3,8 +3,7 @@
<div class="item_wrap"> <div class="item_wrap">
<div class="title">您好欢迎登录</div> <div class="title">您好欢迎登录</div>
<div class="item_list"> <div class="item_list">
<div class="item" v-for="(item, index) in quickStore.quickMenus.splice(0, 6)" :key="item.id" <div class="item" v-for="(item, index) in quickStore.quickMenus" :key="item.id" @click="menuClick(item.menuId)">
@click="menuClick(item.menuId)">
<img class="icon" :src="icons[index + 1]" alt=""> <img class="icon" :src="icons[index + 1]" alt="">
{{ returnMenuName(item.menuId) }} {{ returnMenuName(item.menuId) }}
</div> </div>

View File

@@ -93,8 +93,13 @@
<div> <div>
实收金额 实收金额
<span style="color: red">{{ detail.payAmount }}</span> <span style="color: red">{{ detail.payAmount }}</span>
<el-button v-if="detail.status != 'unpaid' && detail.refundAmount < detail.payAmount" size="small" <el-button
type="danger" class="u-m-l-10" @click="tuikuan()"> v-if="detail.status != 'unpaid' && detail.refundAmount < detail.payAmount"
size="small"
type="danger"
class="u-m-l-10"
@click="tuikuan()"
>
<span>退款</span> <span>退款</span>
</el-button> </el-button>
</div> </div>
@@ -125,22 +130,35 @@
<div style="margin-bottom: 16px; font-size: 16px">商品信息</div> <div style="margin-bottom: 16px; font-size: 16px">商品信息</div>
<template v-for="(item, index) in detail.detailMap" :key="index"> <template v-for="(item, index) in detail.detailMap" :key="index">
<h4>{{ index }}次下单</h4> <h4>{{ index }}次下单</h4>
<el-table :data="item" :ref="'refTable' + index" @select-all="tableSelectAll($event, index)"> <el-table
:data="item"
:ref="'refTable' + index"
@select-all="tableSelectAll($event, index)"
>
<!-- <el-table-column type="selection" width="55" /> --> <!-- <el-table-column type="selection" width="55" /> -->
<el-table-column label="数量" type="selection"> <el-table-column label="数量" type="selection">
<template v-slot="scope"> <template v-slot="scope">
<div v-if="detail.status == 'unpaid'"> <div v-if="detail.status == 'unpaid'">
<el-checkbox v-if="scope.row.num - scope.row.returnNum > 0" v-model="scope.row.checked" /> <el-checkbox
v-if="scope.row.num - scope.row.returnNum > 0"
v-model="scope.row.checked"
/>
</div> </div>
<div v-else> <div v-else>
<el-checkbox v-if="scope.row.num - scope.row.refundNum > 0" v-model="scope.row.checked" /> <el-checkbox
v-if="scope.row.num - scope.row.refundNum > 0"
v-model="scope.row.checked"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="商品" width="150"> <el-table-column label="商品" width="150">
<template v-slot="scope"> <template v-slot="scope">
<div class="shop_info"> <div class="shop_info">
<el-image :src="scope.row.productImg" style="width: 40px; height: 40px"></el-image> <el-image
:src="scope.row.productImg"
style="width: 40px; height: 40px"
></el-image>
<div class="info"> <div class="info">
<span :class="[scope.row.isVip == 1 ? 'colorStyle' : '']"> <span :class="[scope.row.isVip == 1 ? 'colorStyle' : '']">
{{ scope.row.productName }} {{ scope.row.productName }}
@@ -173,17 +191,32 @@
<el-table-column label="实付"> <el-table-column label="实付">
<template v-slot="scope">{{ scope.row.payAmount }}</template> <template v-slot="scope">{{ scope.row.payAmount }}</template>
</el-table-column> </el-table-column>
<el-table-column v-if="detail.status == 'unpaid'" label="可退菜数量" align="center" width="130px"> <el-table-column
v-if="detail.status == 'unpaid'"
label="可退菜数量"
align="center"
width="130px"
>
<template v-slot="scope"> <template v-slot="scope">
<el-input-number v-if="scope.row.checked" :min="0" style="width: 100px" v-model="scope.row.selNumber" <el-input-number
:max="scope.row.num - scope.row.returnNum"></el-input-number> v-if="scope.row.checked"
:min="0"
style="width: 100px"
v-model="scope.row.selNumber"
:max="scope.row.num - scope.row.returnNum"
></el-input-number>
<span class="" v-else>{{ scope.row.num - scope.row.returnNum }}</span> <span class="" v-else>{{ scope.row.num - scope.row.returnNum }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-else label="可退款数量" align="center" width="130px"> <el-table-column v-else label="可退款数量" align="center" width="130px">
<template v-slot="scope"> <template v-slot="scope">
<el-input-number v-if="scope.row.checked" :min="0" style="width: 100px" v-model="scope.row.selNumber" <el-input-number
:max="scope.row.num - scope.row.refundNum - scope.row.returnNum"></el-input-number> v-if="scope.row.checked"
:min="0"
style="width: 100px"
v-model="scope.row.selNumber"
:max="scope.row.num - scope.row.refundNum - scope.row.returnNum"
></el-input-number>
<span class="" v-else> <span class="" v-else>
{{ scope.row.num - scope.row.refundNum - scope.row.returnNum }} {{ scope.row.num - scope.row.refundNum - scope.row.returnNum }}
</span> </span>
@@ -198,13 +231,23 @@
<el-table-column label="操作" fixed="right"> <el-table-column label="操作" fixed="right">
<template v-slot="scope"> <template v-slot="scope">
<template v-if="detail.status != 'unpaid'"> <template v-if="detail.status != 'unpaid'">
<el-button v-if="canTuikuan(scope.row)" link size="small" @click="tuikuan(scope.row)"> <el-button
v-if="canTuikuan(scope.row)"
link
size="small"
@click="tuikuan(scope.row)"
>
<span>退款</span> <span>退款</span>
</el-button> </el-button>
<span class="color-999" v-if="scope.row.status == 'refund'">已退款</span> <span class="color-999" v-if="scope.row.status == 'refund'">已退款</span>
</template> </template>
<template v-if="detail.status == 'unpaid'"> <template v-if="detail.status == 'unpaid'">
<el-button v-if="canTuicai(scope.row)" link size="small" @click="tuicai(scope.row)"> <el-button
v-if="canTuicai(scope.row)"
link
size="small"
@click="tuicai(scope.row)"
>
<span>退菜</span> <span>退菜</span>
</el-button> </el-button>
<span class="color-999" v-else>已退菜</span> <span class="color-999" v-else>已退菜</span>
@@ -214,25 +257,41 @@
</el-table> </el-table>
</template> </template>
<!-- 退款 --> <!-- 退款 -->
<div class="u-p-20 u-flex u-row-right" v-if=" <div
detail.status !== 'refund' && class="u-p-20 u-flex u-row-right"
detail.status !== 'unpaid' && v-if="
detail.status !== 'cancelled' detail.status !== 'refund' &&
"> detail.status !== 'unpaid' &&
<el-checkbox v-model="allSelected" @change="allSelectedChange" label="全选"></el-checkbox> detail.status !== 'cancelled'
"
>
<el-checkbox
v-model="allSelected"
@change="allSelectedChange"
label="全选"
></el-checkbox>
<el-button type="danger" class="u-m-l-20" @click.stop="tuikuan('all')">退款</el-button> <el-button type="danger" class="u-m-l-20" @click.stop="tuikuan('all')">退款</el-button>
</div> </div>
<!-- 退菜 --> <!-- 退菜 -->
<div class="u-p-20 u-flex u-row-right" v-if="detail.status == 'unpaid'"> <div class="u-p-20 u-flex u-row-right" v-if="detail.status == 'unpaid'">
<el-checkbox v-model="allSelected" @change="allSelectedChange" label="全选"></el-checkbox> <el-checkbox
v-model="allSelected"
@change="allSelectedChange"
label="全选"
></el-checkbox>
<el-button type="danger" class="u-m-l-20" @click.stop="tuicai('all')">退菜</el-button> <el-button type="danger" class="u-m-l-20" @click.stop="tuicai('all')">退菜</el-button>
</div> </div>
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
<!-- 退款 --> <!-- 退款 -->
<return-money :modal="false" ref="refReturnMoney" :max="selGoods.num" :goods="selGoods" <return-money
@confirm="refReturnMoneyConfirm"></return-money> :modal="false"
ref="refReturnMoney"
:max="selGoods.num"
:goods="selGoods"
@confirm="refReturnMoneyConfirm"
></return-money>
<!-- 退菜 --> <!-- 退菜 -->
<order-return-cart ref="refReturnCart" @confirm="refReturnCartConfirm"></order-return-cart> <order-return-cart ref="refReturnCart" @confirm="refReturnCartConfirm"></order-return-cart>
</div> </div>
@@ -407,12 +466,6 @@ export default {
}, },
tuikuan(item) { tuikuan(item) {
if (!item) { if (!item) {
let arrs = []
for (let i in this.detail.detailMap) {
this.detail.detailMap[i].map((v) => {
arrs.push(v);
});
}
this.$refs.refReturnMoney.open([], this.detail); this.$refs.refReturnMoney.open([], this.detail);
return; return;
} }
@@ -431,10 +484,6 @@ export default {
if (arr.length == 0) { if (arr.length == 0) {
return ElMessage.error("请选择要退款的商品和数量"); return ElMessage.error("请选择要退款的商品和数量");
} }
console.log('tuikuan===', arr);
return
this.$refs.refReturnMoney.open(arr, this.detail); this.$refs.refReturnMoney.open(arr, this.detail);
}, },
tuicai(item) { tuicai(item) {
@@ -453,7 +502,7 @@ export default {
if (arr.length == 0) { if (arr.length == 0) {
return ElMessage.error("请选择要退菜的商品和数量"); return ElMessage.error("请选择要退菜的商品和数量");
} }
console.log('tuicai===', arr); console.log(arr);
this.$refs.refReturnCart.open(arr, this.detail); this.$refs.refReturnCart.open(arr, this.detail);
}, },

View File

@@ -8,18 +8,13 @@
// adminIn 管理员充值 // adminIn 管理员充值
// adminOut管理员消费 // adminOut管理员消费
export const $bizCode = { export const $bizCode = {
cashIn: "会员充值", cashIn: "现金充值",
cashback: "消费返现",
cashback_refund: "消费返现扣减",
freeIn: "霸王餐充值",
awardIn: "充值奖励",
wechatIn: "微信小程序充值", wechatIn: "微信小程序充值",
alipayIn: "支付宝小程序充值", alipayIn: "支付宝小程序充值",
orderPay: "订单支付奖励", awardIn: "充值奖励",
orderRefund: "订单退款",
rechargeRefund: "充值退款", rechargeRefund: "充值退款",
rechargeCashRefund: "会员现金退款", orderPay: "订单消费",
adminIn: "管理员手动增减余额", orderRefund: "订单退款",
adminOut: "管理员退款充值", adminIn: "管理员充值",
rechargeRedemption: "充值兑换码" adminOut: "管理员消费",
} }