zjs_project 3 months ago
parent
commit
b241603832

+ 23 - 0
src/api/org/department.ts

@@ -29,3 +29,26 @@ export function deptDetail(params?: any) {
 export function createQr(params?: any) {
 export function createQr(params?: any) {
     return request.get({ url: '/system/dept/createQR', params })
     return request.get({ url: '/system/dept/createQR', params })
 }
 }
+
+//二维码
+export function createQr1(params?: any) {
+    return request.post({ url: '/elab-marketing-user/image/createXcxQrCode', params })
+    // return request.post({
+    //     url: '/image/createXcxQrCode', // 具体的接口路径
+    //     params,
+    //     requestOptions: {
+    //         urlPrefix: '/elab-marketing-user' // 单独定义的 URL 前缀
+    //     }
+    // })
+}
+//加密
+export function generateShareSign(params?: any) {
+    return request.post({ url: '/elab-marketing-user/brand/shareSign/generateShareSign', params })
+    // return request.post({
+    //     url: '/image/createXcxQrCode', // 具体的接口路径
+    //     params,
+    //     requestOptions: {
+    //         urlPrefix: '/elab-marketing-user' // 单独定义的 URL 前缀
+    //     }
+    // })
+}

+ 4 - 0
src/api/shop.ts

@@ -23,3 +23,7 @@ export function getPrinterDetail(params?: any) {
 export function addPrinter(params?: any) {
 export function addPrinter(params?: any) {
     return request.post({ url: '/printer/add', params })
     return request.post({ url: '/printer/add', params })
 }
 }
+
+export function statisticsDishTop10(params?: any) {
+    return request.get({ url: '/order/statisticsDishTop10', params })
+}

+ 5 - 2
src/components/material/index.vue

@@ -84,7 +84,7 @@
                         v-if="type == 'image'"
                         v-if="type == 'image'"
                         v-perms="['upload:image']"
                         v-perms="['upload:image']"
                         class="mr-3"
                         class="mr-3"
-                        :data="{ cid: cateId }"
+                        :data="{ cid: cateId,brandId:brandId,houseId:houseId }"
                         :type="type"
                         :type="type"
                         :show-progress="true"
                         :show-progress="true"
                         @change="refresh"
                         @change="refresh"
@@ -95,7 +95,7 @@
                         v-if="type == 'video'"
                         v-if="type == 'video'"
                         v-perms="['upload:video']"
                         v-perms="['upload:video']"
                         class="mr-3"
                         class="mr-3"
-                        :data="{ cid: cateId }"
+                        :data="{ cid: cateId,brandId:brandId,houseId:houseId }"
                         :type="type"
                         :type="type"
                         :show-progress="true"
                         :show-progress="true"
                         @change="refresh"
                         @change="refresh"
@@ -386,6 +386,7 @@ import { useCate, useFile } from './hook'
 import FileItem from './file.vue'
 import FileItem from './file.vue'
 import Preview from './preview.vue'
 import Preview from './preview.vue'
 import type { Ref } from 'vue'
 import type { Ref } from 'vue'
+import {getBrandId,getHouseId } from '@/utils/auth'
 const props = defineProps({
 const props = defineProps({
     fileSize: {
     fileSize: {
         type: String,
         type: String,
@@ -408,6 +409,8 @@ const props = defineProps({
         default: 15
         default: 15
     }
     }
 })
 })
+const brandId = ref(getBrandId())
+const houseId = ref(getHouseId())
 const emit = defineEmits(['change'])
 const emit = defineEmits(['change'])
 const { limit } = toRefs(props)
 const { limit } = toRefs(props)
 const typeValue = computed<number>(() => {
 const typeValue = computed<number>(() => {

+ 10 - 1
src/components/upload/index.vue

@@ -48,6 +48,7 @@ import feedback from '@/utils/feedback'
 import type { ElUpload, UploadProps, UploadRawFile } from 'element-plus'
 import type { ElUpload, UploadProps, UploadRawFile } from 'element-plus'
 import { RequestCodeEnum } from '@/enums/requestEnums'
 import { RequestCodeEnum } from '@/enums/requestEnums'
 import ImageCompressor from 'image-compressor.js'
 import ImageCompressor from 'image-compressor.js'
+import { getToken,getUserId,getBrandId,getHouseId } from '@/utils/auth'
 export default defineComponent({
 export default defineComponent({
     components: {},
     components: {},
     props: {
     props: {
@@ -82,9 +83,17 @@ export default defineComponent({
         const userStore = useUserStore()
         const userStore = useUserStore()
         const uploadRefs = shallowRef<InstanceType<typeof ElUpload>>()
         const uploadRefs = shallowRef<InstanceType<typeof ElUpload>>()
         const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/${props.type}`)
         const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/${props.type}`)
+        const userId = getUserId();
+        const brandId = getBrandId();
+        const houseId = getHouseId();
+        const token = getToken();
         const headers = computed(() => ({
         const headers = computed(() => ({
             ['like-admin']: userStore.token,
             ['like-admin']: userStore.token,
-            version: config.version
+            version: config.version,
+            token: token,
+            userId: userId,
+            brandId: brandId,
+            houseId: houseId,
         }))
         }))
         const visible = ref(false)
         const visible = ref(false)
         const fileList = ref<any[]>([])
         const fileList = ref<any[]>([])

+ 2 - 2
src/config/index.ts

@@ -2,8 +2,8 @@ const config = {
     terminal: 1, //终端
     terminal: 1, //终端
     title: '后台管理系统', //网站默认标题
     title: '后台管理系统', //网站默认标题
     version: '1.4.0', //版本号
     version: '1.4.0', //版本号
-    baseUrl: `${import.meta.env.VITE_APP_BASE_URL || 'https://gatewaytest1.elab-plus.com/elab-marketing-file'}/`, //请求接口域名 http://192.168.50.19:5555/elab-marketing-file
-    urlPrefix: 'api', //请求默认前缀
+    baseUrl: `${import.meta.env.VITE_APP_BASE_URL || 'https://gatewaytest1.elab-plus.com'}/`, //请求接口域名 http://192.168.50.19:5555/elab-marketing-file
+    urlPrefix: 'elab-marketing-file/api', //请求默认前缀
     timeout: 10 * 1000 //请求超时时长
     timeout: 10 * 1000 //请求超时时长
 }
 }
 
 

+ 7 - 1
src/utils/request/axios.ts

@@ -146,11 +146,17 @@ export class Axios {
             ...cloneDeep(config),
             ...cloneDeep(config),
             requestOptions: opt
             requestOptions: opt
         }
         }
-        const { urlPrefix } = opt
+        let { urlPrefix } = opt
+        if(config.url?.includes('image/createXcxQrCode') || config.url?.includes('shareSign/generateShareSign')){
+            urlPrefix = ""
+            // axioxConfig.url = "https://gatewaytest1.elab-plus.com" + config.url;
+            console.warn("***spere***",opt,config)
+        }
         // 拼接请求前缀如api
         // 拼接请求前缀如api
         if (urlPrefix) {
         if (urlPrefix) {
             axioxConfig.url = `${urlPrefix}${config.url}`
             axioxConfig.url = `${urlPrefix}${config.url}`
         }
         }
+        
         return new Promise((resolve, reject) => {
         return new Promise((resolve, reject) => {
             this.axiosInstance
             this.axiosInstance
                 .request<any, AxiosResponse<RequestData<T>>>(axioxConfig)
                 .request<any, AxiosResponse<RequestData<T>>>(axioxConfig)

+ 2 - 2
src/utils/request/index.ts

@@ -98,7 +98,7 @@ const axiosHooks: AxiosHooks = {
                 return Promise.reject()
                 return Promise.reject()
 
 
             default:
             default:
-                return data
+                return data || response.data
         }
         }
     },
     },
     responseInterceptorsCatchHook(error) {
     responseInterceptorsCatchHook(error) {
@@ -106,7 +106,7 @@ const axiosHooks: AxiosHooks = {
         if (error.code !== AxiosError.ERR_CANCELED) {
         if (error.code !== AxiosError.ERR_CANCELED) {
             error.message && feedback.msgError(error.message)
             error.message && feedback.msgError(error.message)
         }
         }
-        if (error.response.status === RequestCodeEnum.QUIT) {
+        if (error.response && error.response.status === RequestCodeEnum.QUIT) {
             clearAuthInfo()
             clearAuthInfo()
         }
         }
         return Promise.reject(error)
         return Promise.reject(error)

+ 25 - 4
src/views/board/number/index.vue

@@ -108,11 +108,12 @@
 <script lang="ts" setup name="department">
 <script lang="ts" setup name="department">
 import type { ElTable, FormInstance } from 'element-plus'
 import type { ElTable, FormInstance } from 'element-plus'
 import EditPopup from './edit.vue'
 import EditPopup from './edit.vue'
-import { createQr, deptDelete, deptLists } from '@/api/org/department'
+import { createQr1, deptDelete, deptLists, generateShareSign} from '@/api/org/department'
 import feedback from '@/utils/feedback'
 import feedback from '@/utils/feedback'
 import { useDictOptions } from '@/hooks/useDictOptions'
 import { useDictOptions } from '@/hooks/useDictOptions'
 import { postAll } from '@/api/org/post'
 import { postAll } from '@/api/org/post'
 import { usePaging } from '@/hooks/usePaging'
 import { usePaging } from '@/hooks/usePaging'
+import {getBrandId,getHouseId } from '@/utils/auth'
 const tableRef = shallowRef<InstanceType<typeof ElTable>>()
 const tableRef = shallowRef<InstanceType<typeof ElTable>>()
 const editRef = shallowRef<InstanceType<typeof EditPopup>>()
 const editRef = shallowRef<InstanceType<typeof EditPopup>>()
 const formRef = shallowRef<FormInstance>()
 const formRef = shallowRef<FormInstance>()
@@ -156,10 +157,30 @@ const handleAdd = async (id?: number) => {
 
 
 const handleCreate = (id?: number) => {
 const handleCreate = (id?: number) => {
     feedback.loading('正在生成...')
     feedback.loading('正在生成...')
-    createQr({ id: id }).then((res) => {
-        feedback.closeLoading()
-        feedback.prompt("<img src=\"" + res + "\">", {"dangerouslyUseHTMLString": true})
+    let signParam = {
+        brandId: getBrandId(),
+        houseId: getHouseId(),
+        attrs: JSON.stringify({did:id})
+    };
+    // 获取登录用户的shareToken
+    generateShareSign(signParam).then((signres) => {
+        let parm = {
+            brandId: getBrandId(),
+            houseId: getHouseId(),
+            path: "onlineRestaurant/pages/orderPage/orderPage",
+            // path: "pages/index/index",
+            scene: signres?.single || "",
+            width: 600,
+            // hyaline: false,
+        };
+        createQr1(parm).then((res) => {
+            feedback.closeLoading()
+            let url = res.single?res.single:res;
+            console.warn("***url***",url)
+            feedback.prompt("<img src=\"" + url + "\">", {"dangerouslyUseHTMLString": true})
+        })
     })
     })
+    
     console.log('创建桌号二维码' + id)
     console.log('创建桌号二维码' + id)
 }
 }
 
 

+ 11 - 10
src/views/order/index.vue

@@ -15,7 +15,8 @@
                 :key="i"
                 :key="i"
                 class="p-1 flex-wrap float-left text-center md:w-28 h-28 w-1/3"
                 class="p-1 flex-wrap float-left text-center md:w-28 h-28 w-1/3"
             >
             >
-                <a href="#" @click="order_(i)"
+            
+                <a href="javascript:void(0);" @click="order_(i)"
                     ><div
                     ><div
                         class="rounded w-full h-full pt-3 relative"
                         class="rounded w-full h-full pt-3 relative"
                         :style="
                         :style="
@@ -99,7 +100,7 @@ import feedback from '@/utils/feedback'
 import useUserStore from '@/stores/modules/user'
 import useUserStore from '@/stores/modules/user'
 const userStore = useUserStore()
 const userStore = useUserStore()
 console.log(userStore.userInfo.id + '开始链接客户端')
 console.log(userStore.userInfo.id + '开始链接客户端')
-const socketClient = new WebSocket('ws://localhost:8082/backSocket/' + userStore.userInfo.id)
+// const socketClient = new WebSocket('ws://localhost:8082/backSocket/' + userStore.userInfo.id)
 const activeName = ref<any>('all')
 const activeName = ref<any>('all')
 const dialogVisible = ref(false)
 const dialogVisible = ref(false)
 const isLoading = ref(false)
 const isLoading = ref(false)
@@ -128,7 +129,7 @@ const order = () => {
         consoleRef.value?.open(currentDesk, data.userNum, res)
         consoleRef.value?.open(currentDesk, data.userNum, res)
         init()
         init()
     })
     })
-    // router.push({ path: '/order/console', query: { deskID: id } })
+    router.push({ path: '/order/console', query: { deskID: id } })
 }
 }
 const reorder = () => {
 const reorder = () => {
     dialogVisible.value = false
     dialogVisible.value = false
@@ -184,13 +185,13 @@ const init = async () => {
     await postAll().then((res) => {
     await postAll().then((res) => {
         areaList.value = res
         areaList.value = res
     })
     })
-    socketClient.onopen = () => {
-        console.log('websocket成功连接服务器')
-    }
-    socketClient.onmessage = (msg: any) => {
-        console.log('收到消息:' + msg.data)
-        const message = JSON.parse(msg.data)
-    }
+    // socketClient.onopen = () => {
+    //     console.log('websocket成功连接服务器')
+    // }
+    // socketClient.onmessage = (msg: any) => {
+    //     console.log('收到消息:' + msg.data)
+    //     const message = JSON.parse(msg.data)
+    // }
     isLoading.value = false
     isLoading.value = false
 }
 }
 onMounted(() => {
 onMounted(() => {

+ 10 - 5
src/views/orders/list.vue

@@ -32,8 +32,8 @@
             </el-form>
             </el-form>
         </el-card>
         </el-card>
         <el-card class="!border-none mt-4" shadow="never">
         <el-card class="!border-none mt-4" shadow="never">
-            <el-table v-loading="pager.loading" :data="pager.lists" row-key="id" :expand-row-keys="expandRowKeys">
-                <el-table-column type="expand">
+            <el-table v-loading="pager.loading" :data="pager.lists" row-key="id" :expand-row-keys="expandRowKeys" @expand-change="handleExpandChange">
+                <el-table-column type="expand" >
                     <template #default="{ row }">
                     <template #default="{ row }">
                         <div class="order-detail-wrapper" v-loading="!orderDetails[row.id]">
                         <div class="order-detail-wrapper" v-loading="!orderDetails[row.id]">
                             <template v-if="orderDetails[row.id]">
                             <template v-if="orderDetails[row.id]">
@@ -136,7 +136,12 @@
 
 
     const expandRowKeys = ref<string[]>([])
     const expandRowKeys = ref<string[]>([])
     const orderDetails = ref<Record<string, any>>({})
     const orderDetails = ref<Record<string, any>>({})
-
+    const handleExpandChange = (row: any, expandedRows: any) => {
+        // console.log('当前行展开状态改变:', row, expandedRows);
+        if (!orderDetails.value[row.id]) {
+            showDetail(row);
+        }
+    }
     // 展示订单详情
     // 展示订单详情
     const showDetail = async (row : any) => {
     const showDetail = async (row : any) => {
         try {
         try {
@@ -154,7 +159,7 @@
                 let orderDetail: Record<string, any> = {};
                 let orderDetail: Record<string, any> = {};
                 orderDetail.id = res.orderItem.id;
                 orderDetail.id = res.orderItem.id;
                 orderDetail.amount = res.orderItem.amount;//总价
                 orderDetail.amount = res.orderItem.amount;//总价
-                orderDetail.createTime = res.orderItem.createTime + "000";
+                orderDetail.createTime = res.orderItem.createTime;
                 orderDetail.dishes = res.orderDishList;
                 orderDetail.dishes = res.orderDishList;
                 // 保存订单详情
                 // 保存订单详情
                 orderDetails.value[row.id] = orderDetail
                 orderDetails.value[row.id] = orderDetail
@@ -171,7 +176,7 @@
 
 
     // 计算商品总数
     // 计算商品总数
     const getTotalCount = (dishes : any[]) => {
     const getTotalCount = (dishes : any[]) => {
-        return dishes.reduce((total, dish) => total + dish.count, 0)
+        return dishes.reduce((total, dish) => total + dish.number, 0)
     }
     }
     // 计算订单总价
     // 计算订单总价
     // const getTotalPrice = (dishes: any[]) => {
     // const getTotalPrice = (dishes: any[]) => {

+ 28 - 16
src/views/workbench/index.vue

@@ -50,34 +50,34 @@
                 </template>
                 </template>
 
 
                 <div class="flex flex-wrap">
                 <div class="flex flex-wrap">
-                    <div class="w-1/2 md:w-1/4">
+                    <div class="w-1/2 md:w-1/3">
                         <div class="leading-10">到店人次</div>
                         <div class="leading-10">到店人次</div>
                         <div class="text-6xl">{{ workbenchData.today.todayVisits }}</div>
                         <div class="text-6xl">{{ workbenchData.today.todayVisits }}</div>
                         <!-- <div class="text-tx-secondary text-xs">
                         <!-- <div class="text-tx-secondary text-xs">
                             总访问量:{{ workbenchData.today.totalVisits }}
                             总访问量:{{ workbenchData.today.totalVisits }}
                         </div> -->
                         </div> -->
                     </div>
                     </div>
-                    <div class="w-1/2 md:w-1/4">
+                    <div class="w-1/2 md:w-1/3">
                         <div class="leading-10">销售额(元)</div>
                         <div class="leading-10">销售额(元)</div>
                         <div class="text-6xl">{{ workbenchData.today.todaySales }}</div>
                         <div class="text-6xl">{{ workbenchData.today.todaySales }}</div>
                         <!-- <div class="text-tx-secondary text-xs">
                         <!-- <div class="text-tx-secondary text-xs">
                             总销售额:{{ workbenchData.today.totalSales }}
                             总销售额:{{ workbenchData.today.totalSales }}
                         </div> -->
                         </div> -->
                     </div>
                     </div>
-                    <div class="w-1/2 md:w-1/4">
+                    <div class="w-1/2 md:w-1/3">
                         <div class="leading-10">订单量(笔)</div>
                         <div class="leading-10">订单量(笔)</div>
                         <div class="text-6xl">{{ workbenchData.today.todayOrder }}</div>
                         <div class="text-6xl">{{ workbenchData.today.todayOrder }}</div>
                         <!-- <div class="text-tx-secondary text-xs">
                         <!-- <div class="text-tx-secondary text-xs">
                             总订单量:{{ workbenchData.today.totalOrder }}
                             总订单量:{{ workbenchData.today.totalOrder }}
                         </div> -->
                         </div> -->
                     </div>
                     </div>
-                    <div class="w-1/2 md:w-1/4">
+                    <!-- <div class="w-1/2 md:w-1/4">
                         <div class="leading-10">新到店人数</div>
                         <div class="leading-10">新到店人数</div>
                         <div class="text-6xl">{{ workbenchData.today.todayUsers }}</div>
                         <div class="text-6xl">{{ workbenchData.today.todayUsers }}</div>
-                        <!-- <div class="text-tx-secondary text-xs">
+                        <div class="text-tx-secondary text-xs">
                             总访用户:{{ workbenchData.today.totalUsers }}
                             总访用户:{{ workbenchData.today.totalUsers }}
-                        </div> -->
-                    </div>
+                        </div>
+                    </div> -->
                 </div>
                 </div>
             </el-card>
             </el-card>
         </div>
         </div>
@@ -157,7 +157,7 @@ import menu_auth from './image/menu_auth.png'
 import menu_web from './image/menu_web.png'
 import menu_web from './image/menu_web.png'
 import oa_code from './image/oa_code.png'
 import oa_code from './image/oa_code.png'
 import service_code from './image/service_code.png'
 import service_code from './image/service_code.png'
-import { getShopConfig, changeShopStatus } from '@/api/shop'
+import { getShopConfig, changeShopStatus, statisticsDishTop10 } from '@/api/shop'
 // 表单数据
 // 表单数据
 const workbenchData: any = reactive({
 const workbenchData: any = reactive({
     shopId: '',
     shopId: '',
@@ -267,13 +267,13 @@ const workbenchData: any = reactive({
         yAxis: {
         yAxis: {
             type: 'category',
             type: 'category',
             data: [
             data: [
-                '西红柿炒鸡蛋',
-                '梅菜扣肉',
-                '黄瓜变蛋',
-                '蛋炒饭',
-                '爆炒虾尾',
-                '香辣虾',
-                '爆炒鱿鱼'
+                // '西红柿炒鸡蛋',
+                // '梅菜扣肉',
+                // '黄瓜变蛋',
+                // '蛋炒饭',
+                // '爆炒虾尾',
+                // '香辣虾',
+                // '爆炒鱿鱼'
             ],
             ],
             axisLine: {
             axisLine: {
                 show: false
                 show: false
@@ -335,7 +335,8 @@ const workbenchData: any = reactive({
         },
         },
         series: [
         series: [
             {
             {
-                data: [33, 26, 25, 15, 12, 9, 9],
+                // data: [33, 26, 25, 15, 12, 9, 9],
+                data: [],
                 type: 'bar',
                 type: 'bar',
                 label: {
                 label: {
                     show: true,
                     show: true,
@@ -378,8 +379,19 @@ const changeStatus = () => {
     }
     }
     changeShopStatus({ id: workbenchData.shopId, status: workbenchData.shopStatus })
     changeShopStatus({ id: workbenchData.shopId, status: workbenchData.shopStatus })
 }
 }
+const dishTop10 = () => {
+    statisticsDishTop10().then((res) => {
+        let list = res || [];
+        // 按照 quantity 倒序排列
+        list.sort((a: { quantity: number }, b: { quantity: number }) => b.quantity - a.quantity);
+        // console.warn("**statisticsDishTop10****",list)
+        workbenchData.listOption.yAxis.data = list.map((it: { title: any })=>it.title);
+        workbenchData.listOption.series[0].data = list.map((it: { quantity: any })=>it.quantity);
+    })
+}
 shopInfo()
 shopInfo()
 getData()
 getData()
+dishTop10()
 </script>
 </script>
 
 
 <style lang="scss" scoped></style>
 <style lang="scss" scoped></style>