From 5a877b550beebe9397818924d4e679316a494336 Mon Sep 17 00:00:00 2001 From: YeMingfei666 <1619116647@qq.com> Date: Sat, 22 Feb 2025 18:13:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=89=93=E5=8D=B0=E6=9C=BA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8F=AB=E5=8F=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E3=80=81=E9=9C=B8=E7=8E=8B?= =?UTF-8?q?=E9=A4=90=E3=80=81=E5=BA=97=E9=93=BA=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/account/bwc.ts | 60 ++ src/api/account/callTable.ts | 277 +++++++++ src/api/account/coupon.ts | 130 +++++ src/api/account/printer.ts | 118 ++++ src/assets/images/application/ad.png | Bin 0 -> 5473 bytes src/assets/images/application/bear.png | Bin 0 -> 1641 bytes src/assets/images/application/call.png | Bin 0 -> 1968 bytes src/assets/images/application/song.png | Bin 0 -> 5511 bytes src/assets/images/marketing/card.png | Bin 0 -> 2413 bytes src/assets/images/marketing/charge.png | Bin 0 -> 3019 bytes src/assets/images/marketing/invite.png | Bin 0 -> 2340 bytes src/assets/images/marketing/score.png | Bin 0 -> 2742 bytes src/router/index.ts | 67 ++- src/views/application/{ => list/ad}/index.vue | 0 src/views/application/list/index.vue | 93 +++ .../list/lineUplist/components/basic.vue | 413 ++++++++++++++ .../list/lineUplist/components/index.vue | 533 ++++++++++++++++++ .../application/list/lineUplist/index.vue | 34 ++ .../application/list/lineUplist/record.vue | 119 ++++ src/views/application/marketing.vue | 1 - src/views/application/marketing/bwc.vue | 99 ++++ .../coupon/components/coupon_details.vue | 325 +++++++++++ .../marketing/coupon/couponEnum.js | 51 ++ .../application/marketing/coupon/list.vue | 183 ++++++ src/views/application/marketing/index.vue | 90 +++ src/views/devices/config/add.ts | 199 ++++--- src/views/devices/config/config.ts | 65 +++ src/views/devices/config/content.ts | 22 +- src/views/devices/config/content2.ts | 133 ----- src/views/devices/config/edit.ts | 208 ++++--- src/views/devices/config/search.ts | 18 +- src/views/devices/printer.vue | 128 ++--- 32 files changed, 2972 insertions(+), 394 deletions(-) create mode 100644 src/api/account/bwc.ts create mode 100644 src/api/account/callTable.ts create mode 100644 src/api/account/coupon.ts create mode 100644 src/api/account/printer.ts create mode 100644 src/assets/images/application/ad.png create mode 100644 src/assets/images/application/bear.png create mode 100644 src/assets/images/application/call.png create mode 100644 src/assets/images/application/song.png create mode 100644 src/assets/images/marketing/card.png create mode 100644 src/assets/images/marketing/charge.png create mode 100644 src/assets/images/marketing/invite.png create mode 100644 src/assets/images/marketing/score.png rename src/views/application/{ => list/ad}/index.vue (100%) create mode 100644 src/views/application/list/index.vue create mode 100644 src/views/application/list/lineUplist/components/basic.vue create mode 100644 src/views/application/list/lineUplist/components/index.vue create mode 100644 src/views/application/list/lineUplist/index.vue create mode 100644 src/views/application/list/lineUplist/record.vue delete mode 100644 src/views/application/marketing.vue create mode 100644 src/views/application/marketing/bwc.vue create mode 100644 src/views/application/marketing/coupon/components/coupon_details.vue create mode 100644 src/views/application/marketing/coupon/couponEnum.js create mode 100644 src/views/application/marketing/coupon/list.vue create mode 100644 src/views/application/marketing/index.vue create mode 100644 src/views/devices/config/config.ts delete mode 100644 src/views/devices/config/content2.ts diff --git a/src/api/account/bwc.ts b/src/api/account/bwc.ts new file mode 100644 index 0000000..3a5fd8c --- /dev/null +++ b/src/api/account/bwc.ts @@ -0,0 +1,60 @@ +import request from "@/utils/request"; +import { Account_BaseUrl } from "@/api/config"; +const baseURL = Account_BaseUrl + "/admin/freeDing"; +const API = { + getList() { + return request({ + url: `${baseURL}`, + method: "get", + }); + }, + + edit(data: editRequest) { + return request({ + url: `${baseURL}`, + method: "put", + data: data, + }); + }, +} +export default API; +/** + * 修改信息 + * + * FreeDineConfigEditDTO + */ +export interface editRequest { + /** + * 是否启用 + */ + enable?: boolean | null; + /** + * 主键id + */ + id: number | null; + /** + * 充值说明 + */ + rechargeDesc?: null | string; + /** + * 满多少可用 + */ + rechargeThreshold?: number | null; + /** + * 充值倍数 + */ + rechargeTimes?: number | null; + /** + * 使用类型 dine-in店内 takeout 自取 post快递,takeaway外卖 + */ + useType?: string[] | null; + /** + * 与优惠券同享 + */ + withCoupon?: boolean | null; + /** + * 积分同享 + */ + withPoints?: boolean | null; + [property: string]: any; +} \ No newline at end of file diff --git a/src/api/account/callTable.ts b/src/api/account/callTable.ts new file mode 100644 index 0000000..fb5b4e1 --- /dev/null +++ b/src/api/account/callTable.ts @@ -0,0 +1,277 @@ +import request from "@/utils/request"; +import { Account_BaseUrl } from "@/api/config"; +const baseURL = Account_BaseUrl + "/admin/callTable"; +const API = { + // 获取叫号配置 + getConfig() { + return request({ + url: `${baseURL}/config`, + method: "get", + }); + }, + // 修改叫号配置 + editConfig(data: editConfigRequest) { + return request({ + url: `${baseURL}/config`, + method: "put", + data: data + }); + }, + // 叫号桌型获取 + getTable(params: getTableRequest) { + return request({ + url: `${baseURL}`, + method: "get", + params + }); + }, + addTable(data: addTableRequest) { + return request({ + url: `${baseURL}`, + method: "post", + data + }); + }, + editTable(data: editTableRequest) { + return request({ + url: `${baseURL}`, + method: "put", + data + }); + }, + deleteTable(data: deleteTableRequest) { + return request({ + url: `${baseURL}`, + method: "delete", + data + }); + }, + // 获取叫号号码 + getTakeNumber(data: getTableNumberRequest) { + return request({ + url: `${baseURL}/takeNumber`, + method: "post", + data + }); + }, + //获取叫号队列 + getTableNumberList(params: getTableNumberListRequest) { + return request({ + url: `${baseURL}/queue`, + method: "get", + params + }); + }, + //执行号码 + callTableCall(data: callTableCallRequest) { + return request({ + url: `${baseURL}/call`, + method: "post", + data + }); + }, + //获取叫号页面二维码 + callTableCode(params: callTableCodeRequest) { + return request({ + url: `${baseURL}/takeNumberCode`, + method: "get", + params + }); + }, + //修改叫号队列状态 + updateTableState(data: updateTableStateRequest) { + return request({ + url: `${baseURL}/updateState`, + method: "put", + data + }); + }, + // 获取叫号记录列表 + + getCallRecord(params: getCallRecordRequest) { + return request({ + url: `${baseURL}/callRecord`, + method: "get", + params + }); + }, +} +export default API; + +/** + * UpdateConfigDTO + */ +export interface editConfigRequest { + /** + * 背景图 + */ + bgCover?: null | string; + /** + * 是否线上取号 + */ + isOnline?: number | null; + /** + * 临近几桌提醒 + */ + nearNum?: number | null; + [property: string]: any; +} + +export interface getTableRequest { + /** + * 叫号桌型id + */ + callTableId?: number; + page?: string; + size?: string; + /** + * 0禁用 1使用 + */ + state?: number; + [property: string]: any; +} + +/** + * 新增数据 + * + * CallTableDTO + */ +export interface addTableRequest { + /** + * 是否顺延 + */ + isPostpone?: number | null; + /** + * 台桌名称 + */ + name: null | string; + /** + * 临近几桌提醒 + */ + nearNum: number | null; + /** + * 备注 + */ + note?: null | string; + /** + * 顺延数量 + */ + postponeNum?: number | null; + /** + * 前缀 + */ + prefix: null | string; + /** + * 起始号码 + */ + start: number | null; + /** + * 等待时间 + */ + waitTime: number | null; + [property: string]: any; +} + +/** + * UpdateCallTableDTO + */ +export interface editTableRequest { + callTableId: number | null; + name?: null | string; + nearNum?: number | null; + note?: null | string; + prefix?: null | string; + start?: number | null; + waitTime?: number | null; + [property: string]: any; +} + +/** + * BaseCallTableDTO + */ +export interface deleteTableRequest { + /** + * 叫号桌型id + */ + callTableId: number | null; + [property: string]: any; +} + +/** + * TakeNumberDTO + */ +export interface getTableNumberRequest { + /** + * 叫号桌型id + */ + callTableId: number | null; + /** + * 姓名 + */ + name?: null | string; + /** + * 备注 + */ + note?: null | string; + /** + * 手机号 + */ + phone: null | string; + /** + * 对应小程序用户id + */ + userId?: number | null; + [property: string]: any; +} +export interface Request { + /** + * 桌型id + */ + callTableId?: number; + /** + * 状态 -1已取消 0排队中 1叫号中 2已入座 3 已过号 + */ + state?: number; + [property: string]: any; +} +export interface getTableNumberListRequest { + /** + * 桌型id + */ + callTableId?: number; + /** + * 状态 -1已取消 0排队中 1叫号中 2已入座 3 已过号 + */ + state?: number; + [property: string]: any; +} +/** + * CallQueueDTO + */ +export interface callTableCallRequest { + callQueueId: number | null; + [property: string]: any; +} + +export interface callTableCodeRequest { + /** + * 叫号桌型id + */ + callTableId: number; + [property: string]: any; +} +/** + * UpdateCallQueueDTO + */ +export interface updateTableStateRequest { + callQueueId: number | null; + state: number | null; + [property: string]: any; +} +export interface getCallRecordRequest { + /** + * 桌型id + */ + callTableId?: number; + [property: string]: any; +} \ No newline at end of file diff --git a/src/api/account/coupon.ts b/src/api/account/coupon.ts new file mode 100644 index 0000000..67aa566 --- /dev/null +++ b/src/api/account/coupon.ts @@ -0,0 +1,130 @@ +import request from "@/utils/request"; +import { Account_BaseUrl } from "@/api/config"; +const baseURL = Account_BaseUrl + "/admin/coupon"; +const API = { + getList(params: getListRequest) { + return request({ + url: `${baseURL}`, + method: "get", + params + }); + }, + add(data: addRequest) { + return request({ + url: `${baseURL}`, + method: "post", + data: data, + }); + }, + + edit(data: editRequest) { + return request({ + url: `${baseURL}`, + method: "put", + data: data, + }); + }, +} +export default API; +export interface getListRequest { + status?: number; + type?: number; + [property: string]: any; +} +/** + * ShopCouponDTO + */ +export interface addRequest { + createTime?: string; + /** + * 隔多少天生效 + */ + daysToTakeEffect?: number; + /** + * 描述 + */ + description?: string; + /** + * 减多少金额 + */ + discountAmount?: number; + /** + * 发放人 + */ + editor?: string; + /** + * 满多少金额 + */ + fullAmount?: number; + /** + * 自增 + */ + id?: number; + /** + * 剩余数量 + */ + leftNumber?: number; + /** + * 发放数量 + */ + number?: number; + shopId?: number; + /** + * 状态0-关闭 1 正常 + */ + status?: number; + /** + * 名称(无意义) + */ + title?: string; + /** + * 1-满减 2-商品 + */ + type?: number; + updateTime?: string; + /** + * 可用结束时间 + */ + useEndTime?: string; + /** + * 已使用数量 + */ + useNumber?: number; + /** + * 周 数组["周一","周二"] + */ + userDays?: string; + /** + * 可用开始时间 + */ + useStartTime?: string; + /** + * all-全时段 custom-指定时段 + */ + useTimeType?: string; + /** + * 有效天数 + */ + validDays?: number; + /** + * 有效结束时间 + */ + validEndTime?: string; + /** + * 有效期类型,可选值为 fixed(固定时间)/custom(自定义时间) + */ + validityType?: string; + /** + * 有效开始时间 + */ + validStartTime?: string; + [property: string]: any; +} + +export interface editRequest extends addRequest { + /** + * 主键id + */ + id: number; + [property: string]: any; +} \ No newline at end of file diff --git a/src/api/account/printer.ts b/src/api/account/printer.ts new file mode 100644 index 0000000..386861b --- /dev/null +++ b/src/api/account/printer.ts @@ -0,0 +1,118 @@ +import request from "@/utils/request"; +import { Account_BaseUrl } from "@/api/config"; +const baseURL = Account_BaseUrl + "/admin/printer"; +const API = { + getList(data: getListRequest) { + return request({ + url: `${baseURL}`, + method: "get", + params: data + }); + }, + add(data: addRequest) { + return request({ + url: `${baseURL}`, + method: "post", + data: data, + }); + }, + delete(id: number | string) { + return request({ + url: `${baseURL}`, + method: "delete", + data: { id }, + }); + }, + edit(data: editRequest) { + return request({ + url: `${baseURL}`, + method: "put", + data: data, + }); + }, + get(id: number | string) { + return request({ + url: `${baseURL}/detail`, + method: "get", + params: { id } + }); + }, +} +export default API; +export interface getListRequest { + /** + * 类型 USB 网络 蓝牙 + */ + connectionType?: string; + /** + * 名称 + */ + name?: string; + [property: string]: any; +} +/** + * PrinterAddDTO + */ +export interface addRequest { + /** + * ip地址 + */ + address?: null | string; + /** + * 打印分类Id + */ + categoryIds?: null | string; + /** + * 分类 + */ + categoryList?: null | string; + /** + * 分类打印 0-所有 1-部分分类 2-部分商品 + */ + classifyPrint: null | string; + /** + * 现在打印机支持USB 和 网络、蓝牙 + */ + connectionType: null | string; + /** + * 打印机品牌 + */ + contentType: null | string; + /** + * 设备名称 + */ + name: null | string; + /** + * 端口 + */ + port?: null | string; + /** + * 打印方式 all-全部打印 normal-仅打印结账单「前台」one-仅打印制作单「厨房」 + */ + printMethod: null | string; + /** + * 打印数量 c1m1^2=顾客+商家[2张] m1^1=商家[1张] c1^1顾客[1张] c2m1^3顾客2+商家1[3张] + */ + printQty: null | string; + /** + * 打印类型,JSON数组 refund-确认退款单 handover-交班单 queue-排队取号 + */ + printType: null | string; + /** + * 小票尺寸 58mm 80mm + */ + receiptSize?: null | string; + /** + * 排序 + */ + sort?: number | null; + /** + * 打印类型(分类)label标签cash小票kitchen出品 + */ + subType?: null | string; + [property: string]: any; +} + +export interface editRequest extends addRequest { + id: number | string +} \ No newline at end of file diff --git a/src/assets/images/application/ad.png b/src/assets/images/application/ad.png new file mode 100644 index 0000000000000000000000000000000000000000..23718f0579a2f19c2a4cc66c031c0d217b148e61 GIT binary patch literal 5473 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/application/bear.png b/src/assets/images/application/bear.png new file mode 100644 index 0000000000000000000000000000000000000000..f091bf8637e00f9b27e07f86418ceb5e5456771b GIT binary patch literal 1641 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/application/song.png b/src/assets/images/application/song.png new file mode 100644 index 0000000000000000000000000000000000000000..327b3309159ca9cc4009ff5347666b7a6e22074e GIT binary patch literal 5511 zcmeHL_ct8Cx8GfhCCX}1q9=&nL-gKBh%Q8nC3^2=qlc)A=utuvB~~ZOCQ5?U79m)R z=v|`Mx8L{vf%o$}Z_b&SbMDOj+&eRO+9&a;fhIXA6Da@yAlKGXGs4#g|H%*{e5qiv znSrmszADC$bfj;O-Vj0>P)guqX49FP?333#cDC>Yp-fM>utI2<|K)_21R z$rv(Z3+y7-uUdxarrTlr*Solu$RgiSd6?(hyodBVd3g*LbOBA$j?$ZxnG*6@T1lRt zDHI5RP)KZ4gmJ6sL(7>xu8;(n(sFCD{QoIRTXN4WLLO2^sSGV#6-8V z13(;9AGzP&4eC5Ppbu|I8gbj?0lnzpa($;+meWg2!r`AZi0>3fHI_KoM|Z&X=qTcB zH}37t!#V@Y+ZqeXglH${a>)>U|U=TZ01X$>|BsvVG9=!{Dd5&8iO~fd!cjZfB z8w3_j4S`@Klo6<1qs3#Ru=5Oox^8wNKiN2fk3F8pXpJ#KqLffzKWjw;yNfaMPF9OQ zvILYfdB>E8nhWk4Kp=Ec*|u*zy#C8L(b~eqFDn*r04_Axk=*cg)C2Zz%4t{sPnNfW z6F*$?ZkX$$0FVRD_uI2U90!g5%cl#v!LcdM$^bAJZep}}Uu98k5r79&SDHujO%S;i znhHkfzgeb}DJ29#p|}{=7?ed9Ta2L+0DMLjg}U;IOHf{<1wxVs0H9{K8Z zLji&^_yWKTG*PJJ%=j^70LXzN3g7^OzVrSIm4PVPqJdCbJpf4DfK`PUZ}jp14Wlr# zjYB)pNq+9PVx_Z2l|LPIlHByQmktpOtlO7Xt2H0$FLd~-s>(CkeFm#|OFCwaX04y; zS@HkdA)QOVRnvQ?6N10p-6l{ z1*V{SpIJp|u%WMNRrDl!IW+GPI@({;#X6XxGwk3+WA{m&%e8cq9b{(`P4rmktproS zOuhyWWku~cuW~bWkmQ%W4^uDmUF-%d`98`s1Q7_;0O8hoXZ>;5`!ZSeGGvt=!CCcf>1{`z(L+FL*JvZ8K(weMKtS z#>2ub*3`DBu_NPU&!5+)6w#;JwBzN(Fl&W!4z^!jA?Yxjl~3{CPT!qo5S%6Nu$d~c zv17ZKcaUajjH*bXTF|~EO7=v+tIzx%1vN-kVl{Hti^cl)U%B{{+C#hHhvo*Zz5IzD ze9#&A?>&ZGHQ~TQJ=WnrsPV#ZE!nD*i4E*%`ztiQbu*&;&+ySuj12{|#XnW1hERo7 z<5j81_o^vTC<^VB0lP*TTsUqk;!BUl>aCY4%XzjFUDsM9;hLt3?HY-kc-T2AF3hW^ z=0ksILEPTYlbYnsIK0Q%tEVB3hC>H;Dejrr_T+Zn>W55o@dqm{qSoRtnlHvUGmA!A z^*0%6ARZ3tLi!7*uj#CRFA#&99Uvhclvk?5+E`Y$Ma>_SxQjcFUSQkr-;d)pi3p&EGbH@Ki zFM=~%;y7u0Ep0qTfvin-Icp9UzmT>psAStmv*H;v^cAcBm(dx)MnX2&hC8e>Q?ZRl zpEa$c%bjyNWHvkpYiDlK{+ybTnG}mn^r7ZOb&4 z@Ic%M{2JPK*rp3vpRm0&{kJpQxp(=ax2Pw6rjJDn1(k+clBM+Jp8a@0K3Ak4znv=j z)AE2rWpVL0uN4jTZCc(?v%FGMNMU`j7^eut4XjQ$#{k6@vTm>J4Q;|7Ptc*0ksQjl z4#9j=dHJKgm#=g-`sdqpR(q0d+3OgM>0V9LP!GNRR=FZ*@{ndN1_U2o`fOa~fe31w zx!TdDcZ(o`XBiE5*v@kwR==Kh&bsr6ARe{$xa|3mN5%}fBF6v;zQY81K5Cx*a4(M& zXUgyK5P$w>Yc{nduV_reYf;i7UBuU(mFdZv3w|5Ax(XHNeQeSJVdTU_@Z5^v#=4LjA zXDkCv0<&(#?!uM_FPJW{BbuO_Vsi*DvXk#W0eC|Q-A*j+_Gi>&G<46eUUW*#K~$F! z_ElXIY^9a4i)5;e=yzucrEG7RHF|UuWWQjk#hyQ8p>nlr`=n$`^m{~y#h}~WUs)-= zeOK>l1%B#${%sUwzY-J8QMYWtoGy{TT|q|9r_-V(urHVTGhD^3yp*^v(U%KS?R64C zh09#?yHM4lYG3jRxhlFX)6WW3UG8lX1Di_t<{Iwy>Q^1ozC`I{8Ys{R3s~shNm4YH zNLq_0gb%}*y(nvX{y1yrkRWL7<~3d#AcA~X6*6Eiu(3HKJUnz@3Ugs!{-4AWE4eMM zes7jo9&0aS{%E?a)K)$ZoIXcu1L5S;56*}rF};BcR?cZ>d#e3U06=KSviOqv2I9h-ouMQChP`AY9PkUs`YRcy;4F zfj!B(y=ugn;t$FRtN2Hlx%gXhZvx%SeP;+WxY4$%V2(3-?PW4abNh#5bVot$$1fGB zgDn`#!+m->oRy4Fr9Tl|aL_sa=dZ@Pp+W@ou7hD}NuWbauTN|;c1rz0;GKCht7WUb z<86nps+1Ihi)3z7%n9_EL3&yl4Q`964|dmJek8MNZW=ufMy{(~M!rPmCiH^zKIQPX zT--%}fLI&Pzq}k=BF~PsmgI%^KN;mAW&Bf7+3sI=Mp&1H!aBM$j7unVpPIVtqdEYT z|1LFsAP3VLVD@e%T2g-~-{3T1xPJA{(Zg4GE$&rSk4R3oUtNIO(h3XMC6bNC43f)rdF=D@+zH=;JKiYkARaG-$`1k7<#OcQt%fk220T(cP-8Y)j zw%sRWdn1i&rb+Z`Y}BKi)0@W?$M85+9spbw7W6sRSx}|J+7H$+SIjW;fmdHp;QVRz zQR^>6^Y}+39zj`7-d?`y$Aso(=XIhomT4C4jr@g>+pgus**kxAM$3VqGwjXZ+#>Ct zPRB{yXKPKv1-6*bF<@AkkZ}O;qo{w!+5|2>gCYc$^_7WohkG@M!0sRjBQg0K>V2UUsXxFM0EC93#ewk4l4rS!1Q}M$~T5^EVF? zyg;9g?wfYKvpC=j5A(B9I`*o|1G9TUgVS9(^V_bqp&aKXt52n-c2To~5r@lO zP%wpvZse=ed+m?UGXSo?BhQMq?2(0ocZ@B~JR(IBP$D3xGyq}h8A+|=tk24qQ!_9a znYi*M_2CF70Dg^LZ$mO3`StJ8_V28h(%BU!X1en zhq#@2@fS- z*R^&}-3uzI&qXo^MZ?cXuygoNO0jb16Fp7bsSU-p#niS~B`XO*ghms7kgQ`#KhK4vBmY&_RR{H`HGH6x&wTFKh4t`yy+46q3tQfu zyt$5hImj1E)Wx5em#P9sDo2V3<|M(E&P`Asb~LHaso>zn!ZxZ&x(fE~k4r`eU3&w4vDFPv3objsEkp>Nz+7^j2ypGX) z$_^PwN^3iQS#0)mcuLpf=J<*=;j%XuuQUw=$Of4}&@=FQyzGKr4);-g%!MLlq&DS# zx z5$P26TVw^*-Zifc<(lpm`}$MAZ-smIueA*=R3sycpD?@oa%97c<+^>fO{3neu|}}# z2WQSWRY#PkjH^_@q7J;WlA_YCM(BVa_t(SQ$&ZvPrti!@tS7oi*ha9Z+LGQ&-WULk zBxyBRyflh@V%F3?CaiFe-^ZnXCPQ3EAWx%_b!CpGRa5U(ga0(by#khGYLq_11tbKc zA1w00D=TbN&05-j3K!kp{X580KJvVaTU5Zb<7(`!j5>Gmuaw%&#+v%5N5(rxRpHEF zkOtK2E$Xzf`%PTS-a37QFn_?ghm74WZ@1SH`#q9Y72BV#f5=p)E2zCXP?^0tnNkUK zJlDMWy%@>N-awmz;OmlD2V?d{XZXIeY>Y-z8(MfIpYQbImsRau%IEK+0Q8^~I_Wh3 z+LheE`ZRjkOYhv~gnti!KS(2B~mCk6Bn0h{q0*S#;~GjcUN!HxSfDIj=s zlrG7J-NHy7^Vim78{V6%*$>PjZqP-o|KYn1Ny3&+E<@EOr#!!7ol}C<(0ljaPd|;} z`S*{t;Z8Vc2&2g3+E_7hXD=E~6%CLDmG%A({FHowKq(})I1W!rghXMzpdyggn5f!` zYVz;~SP}D{3+UF1yC{Heb2e!?8k{5YO+;BK7$jrZW>%U1=wvve#jZ|~$~IQ1H IDz>lx3o_&t;Q#;t literal 0 HcmV?d00001 diff --git a/src/assets/images/marketing/card.png b/src/assets/images/marketing/card.png new file mode 100644 index 0000000000000000000000000000000000000000..efa5f45c0e0cfdfda99997393989d35e39ba97a5 GIT binary patch literal 2413 zcmdT``#;kS1Kow0%koXGGum=18s-*}_H2`~n3#CoFS%51x#c!(npzPRN`|5^6l&x? zNvK>JQ7$pmLoT`YpoGW!KfJ%ZKb&(upL0H+bACNHY;7zNVn{I%2!uFwl4Q55%>M!o z+vPK)tHrwl4!5%;fXaJNGa!(t#wpTY)M)n~xtJ7X3+WC4@`8r9vyDbS!$KDW|>oA+L+=(~tA$JAf1U>tHE zV$}XZ_GWf3tHiG-`=Wb-0NQrXM%+Eu)vF;a(6vvQGORfl(&uH&8)lgiI+#X|Sc*&Z zggS7+xB+|DeE?-gJ$9$%g=LOZS|C2~;X}W?3Ss!u^l_!s?VP?po$K#mLPcVy6-pej zc+cfOO9vgEP5g$vsXQ@6_AHH_E%GxrbDRi($NRIB#3sSRa zmy*a52pG7Xt$Y#h!7+3okjeb4%{2wNIGj`Trgrx~OijSNMowk09ty@1Vx$8)9^bMt z?cS0wMC%@l-*Qj+b-(iyNN7bocrfKV#68neA@}GohJysM)bTOzs~7N|TAO1N`bpz^ z&0|a(KS7N7=hTkWNU)Y3(*Y?_Lmp?I?Y+3uNWZQzVW({D;kF9cYaI?jax!5w2kEJSx4 zp6mDI`91p+0xOu#nRi3-g)*by^-=hZRCXjqF`;#gF&9RpOrpjx5$*YsW~Z-SzH--W?(2IF znBi)6kW$zFr2N;-oW+u*xJl0FEyw$D?|gO+H4)cg_d+%mvy;|veDV)~ihxIKug#sG zR__3{xM@C=-PmU6gpJ!Gtg$%$dXUXO7P#;G+KXr_&N6WLK)0aJp-HP82B73U44%v= z{gzG2*9V48bGY9y8}=&y8CX4v#4nj-LGx#nba^;@K!xH95aWc8+oC*r!~L)Mj9vc` zSoZE)wT*IqCwcgeg%O$`+I6TDhu`>8#{M<|ySy%0)kM^Y57<;}-dxk4iZ15Pv40~I zkBjEFKE~mG^UJosd}paHK_nVQD3H1bmNzcbaSg7pqL$~=7Pv8f-id&8EvmWS8B=N$ zmT@~6=HPd-$W4(Vm+L?}t^Z|>l+OPgfOO#$Mis0$gr1N(<1!o2Xg=8Lb0 z4iED?7Dky8sH2A;H@(V{VLA1-KgGEEv{Zk6*Fo+55f#j<3|%cRTU_14vp~Fa+k(K=6az%KV6Q%P-+?Ad9PJ#EH5!e{eqo1Rr!F zcx$e8Kch-wz)*@wU(0A)D|JsY+iWE!jgK>4sM9sdt5-f6i5+UoOsT6#(FAZ9KW)ht zHzNUeyt%<=C8?G;t@gXefLS0Oz+EXW4-X1%Gs6%!m3arzGA!O{--D_i$^DV@@!73J zi5L+C`gZ~I_I1Ad$@<|kYlT86W_gb}+U_&JimLQm4x(L`9piUJU)D+=di@A^1I|?q*fJ_Tn=A^ zIDZ?vDeW)Xnnt`Pnv_l(^Yhiu?9-^A7(6@e zThqZv8p$e-eaj~{uQ!pH_57Z7Jz(~Hf+8fyaT;?irEqH#H8Y)olLrpX-r|(eQW8k_ zZ5(iDJDHTH6|`4sFHFg82o_aXW$vP-=$+BsK$u;?i_*pvrcGh&`pKN+0PvZNsj@Af z`eN7{X$6aCmEkG2$VjUk^L{#=e)l8MWCcLBD}{eBsi`j9vKKz^)33TJd~N|##Z9%# z9StkRKf;_Fwb4uT&ok88(ld80UHmdZ6~rJ_2C0#$+x)Gb*1?2QDDI`tS)DWpjHEo8 z95g^b_{kvVs2~1YZ`0se1k2kxz1ZjfIs#2rT-hNnaAUG-&XVmP)ir)jpkRMwe8SCr z_#t2u4f;{@I7lDJm?Sh@ zmrH6@)~w)@9G@i)n{MbslYHQqbl-V;AvRMZv0J5>z5vv8d|W-60K0u8fm#6(E9T zGv_9cwc?aOs-1?Zunh2jgxsgWXqWF^Zkaz*f7={rN1JVS(D>u^akQ4;zStj3>B3a# z#q4#N*%bL9QLs3`|(V2z|qo#{|7umV(Lma_8mBM0ls;mkRn|L^(P$Hd8o z-oXy9FB8cZ&!!bOi6-t)r&kk8jrrm+T?gWAx${ob5@wpxpASq01({{GLW!F{F+V<% zb`AM8#4*Y2dwxbmNX=Z$T^|St5gxi~ef9cS} zRiArZp~7+R3z=et z?VUy2N?!#bCu`=v~Kh?wblQGeMmreml9L0b?DC zEL*j@`vYBJO+Z;N*T<$D9JpuFyTQ4){+(>*U6D1}epn8}2ikzTjb`K;Qs}oF%E?&^ zj6WXxWXpdwOHHrx)mDLi0hv&8;gz259vEneI)jiKNs&IEY69H~bOBhGIz6AJ+suv< zX#Yp9JM@m%=bgx~9Lr=p$g@4DKpyG;=Rnau=E94+cKiiGFP%+GjzT`fDn*fI)?LI zj+u!X6mE^{j@6kE zxj~5uc@2iKZEb$=q1D3~o44D8WBBrGLml7Skpbb1hCFC+du4 ziN^TeX>4_}_}22_4DwJbM?LZgc@(QqDX}kQJ&!1YZ&xyg3Rb5y2&RhHK6rT)FII1V zl8TwzM%5d_OU>DR1n$n?=`BvqIDaG`Y(HOG@wo}%gO95%cXxH?38>kbg-qI2PU}7r z@t-KKlRa%XaE~S+i`oU4%aXyo!uB1w{2!06w2i(f>dFQPWyCN2h^uYJeJ;j3u7;x$R4|$HIon;<%HR(F+pP;rsHfEt zyCf!#3D<84anRduu~O2dmz*1sv)U5H1v9zh6`3Ya+!xhbz=De$v)YrWGKYA@l&5i@ zvscfag=Y02gz3#HJ4L+P@f$v3=wgY11k(1N7~Ii*(t*J$1~Bx4&_^HCay`m zDW${U@nJXTc?cWDLL&`IzR$YUpnmiB8UzuLNH^Y~-y+fCS9PpH*oT(T-s9g-12Q_) zptOtqvjRw)Q24=ih$dP*TO(Ncus_EC@BAzYf!ugA&DWe^Lh6sLT5PCEhi>=xdmP6) z+%Qk`UK^SS%XZD$>*Cg1k~=a$k3}Nx zUxzN6?C?GPfBCoAojBy9!asPTD;sm^+z47fqqACeDg0@rFaVvvPxbervCTo4M(}R` zh~rB6Dz4SZy#-SLyo(#km!Qw$`NA(FeMhv&F6cFVw$1yjP|AeCeq#;DVW}2{Zqmn> zb3@@_vJc%^!LANN0|aFgi&xByWw+tH=zt?qB6`iID)7~f(EU}f5Lmv*!L}5#Fv?mc zd$Fb)4yqOAnjF6~-@g5h=N{CrX+=!ArduzdQ_Rd+R3>u6LO1jC!eztpCy!3VGflJv znfWR9IXA+8?b0wt*xpRf-#@X2BPMWraFyv1x+yWP!J^v#PT>PFU*nP%%CDPNO=Osb zR6sW82z?Em)RhwLR36`~G4>Iq!1T*R!Yw8QF|Ww}E$|ttBw{xO)h|0}{i*lzy%5;G z?iIr#zI(!S(0u2QyL99c{+0@2mlNt-!CIp{m`Ifj*r%A25c+AXG%Bq-?}oNaZ8x6N zMGhT1!=qjzJ0`_>9=lO3DZco(Ktc7D@f-^cCsBnbE0rMT(4&(M^_K$HNoECnejbbl z#-RrBfIjpgdTtd3Pbw`Mi?h^63l&Jhv@yMRiOWriMpf zXv8XH1?=Z<)wvfMMc0R}W7*$|{`;3Nd{2=-qNAJPt4xHpx9-uzw$MwjGqA4*)u+yH zQ`piHeq^s#SB6VUnwg$x-@ad189BQYnfK7VHX#@{O=7@pmU#gjw39 zk|R>o8J6-W2^311+HRF+rz7*~H;s-koqxAy+Xbl*W?5sBn&@issCzQY2t($2Zd<6C zV7P5;iN@E+4>*A^giY z32uzy$akaT3XEk}zNbv7{I_%Rk?XYTf0DfC9344Z7fK|v)^*;k-m}smGL9)wkxJa& ztXsHyy;Jq|j%xEee2!@jAz-uef!}``D|R?#R=7%54&3_|ysXxlU#HAGGnO1e21uv1 j1{r=kUispvn|~^rpiEANi={fBw{w7zff=F>?i&9e1R##2 literal 0 HcmV?d00001 diff --git a/src/assets/images/marketing/invite.png b/src/assets/images/marketing/invite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef58dc2e126d3c4c250c1cb9dd046548719a45c GIT binary patch literal 2340 zcmV+<3ETFGP)Px--bqA3RCr$Poh__gMG(j57*s_ArkGOE8Zhq}Fpu;FOi4(nC059PgFntCL6$L{TR8(OO`S-HP<>sEVGrK#xd+*F9H*MNEcXwxg zXLfe>;|@eb`-kJXk?4>{+99IT_%|Xs_@4$G2nWJ}a0aF|;2y&1a1Y@OxQB2C zm>TdQgQ+MhVh)5AOEdfFKrj_$Ma+S)VrgbS9SEkPtcW=fRxHizrvt%Mloc@t!iuGt z{d6Fhin1c+Kv=Ofv!4zGQ&CpL90)6xX7 zQ3rylR88*?ntsK94Ba~r3?*3-@gc*K zwV8db6;$5%j_CLgW}_6ue8^xb_4*#sr3*~q3^AW}W+<=bqcsv!*j0t}b<5%&f~kGP z5g0Z~EO}2=**XV-b~zACARu;ihv@3A-~oXs7Pl~5v@Q;Wzyg}n&mO#kdk6sx7%Dz} zM`tfY>+IyR8r(xLq0m~~YMq%}?Y;xS00MCX;)l|uC(jW2=0HTOj3sY)hmr;R9som+ z=QA9L8A~IGMBEUYYGS7oWcFSn!j9~9C7j;s6$JMXkyoC(yL#2_0}MbB&T9Y!Oey^+ zUr8U^;JY|MWN!gs2{rkUu||uWAhMTT(j_49Y3Ga|fFY8PMgF1F2n1bq`=z4kEh;0-gZpCv)yy zkbr?~Va)q%a}e1r5bz3kQ*j$hZ>5)$*){aiMGV0W=xQirwT>PapfvT+90;U&5zy5d zA|%SZ`wP+SpCwOhzHCznA&jpEtHl(UN|s|Fm_Vu`9i zqz)A@J{FW>Th6Y%y0~Jvbg?w`tO`WRPyrZlyp6lmtN{hufI~ErmDAEt*809`K%^dW zk-nW;=O?7?sAa&?^;84m+H3N(G~UR!KbLnI>2K6mvRLsF)qqI3UjcgkB>d%pHHa z3J@v71)AR5kbyRBd-hTth@9~}HIQ4E{6aE|yEcJEx2d2s$7{vk&-N1PK%~YGK{Y9F z4@Fa{=y3jH>dkZ@GJIAJ5bzAR zdnvZ4wcI>_fy+H&cS_D3#lr&G+-6^_t!&C^ZmH?I^$>{Wv7a$@K`C`*m7~CI-XqZ^ z5T#PYT2T0q!Fg>aWTZi5>H8XyQ@|}SQw7u7RWF1*#?Fh=&tSnV)pKR2vdW|C9zr_p z)Oh>mpj->Yh56ug|FDW}npC0=gyhmLtt?>4Yl%HEmC32(wRs$mTTNB7i!c}S(oHC!fX;!mdd^h00kdX50 zz%`+$21LoJpSJOO{C@2iEA+V<5U4QbC3-YOXcOn^A?@~SPRpABp>>Ex+YljPh9D3D zGFDQ#%j_lFR>MnF^$<{wBy(9(nW^73HGa2%LpxUk9aRScm2&bDsRk_l9Ou^Bns8{W z^(^bG2@snybfip$wc*f?BbopKBDMA^l=2WI7TUsf%q7p6ZY>Z!Ls5D~GnSN-K&-ue zubGDkO6bi~CoB^G00&5gOSlafRs| zc242`Dy>pt9YuSF(QMi|r}Wx4+alS6t^V3e&72kAIlZLJcv9f*%0n!702^AgZk9tm zEq*&wy1z8&qsCCtBz2uaEWjw4DsBNn4(M8O&6F*=^$@EK4hf&-9Y!3$!msF@{JGff z*2DIB&grsN;BE{MtHuvMn2JBwZM;ED5I!7mTF9*a=xb<0OK>+9h!zI4P^SZ7!ODU@ zIuHV7SrBy~ELd64M+ZWnEDNFzgas=L`shFilx0EGfv{j@K_49mfwC-!IuI7DEa;;H zAyAeDQ3t|;l?8otAOy;?AnHI^u(F_!4un8i7DOEg3sx5N(SZ;s%Yvu_VZq9RJ~|Kr zWmyn)AS_r}&_@SCpezfb0OD^VI&Gn|-p9BGhKq;e4>Zz#T+}7DT>}Hry*USC&NIy1H=FY5q&(4bUFH%3v8PP0Ky3o9UL7DkNySmAv~b^n+KTy0000< KMNUMnLSTYeawfF^ literal 0 HcmV?d00001 diff --git a/src/assets/images/marketing/score.png b/src/assets/images/marketing/score.png new file mode 100644 index 0000000000000000000000000000000000000000..00dabe6dc4ed153f5f1bd7e750fbee4b24a91128 GIT binary patch literal 2742 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 import("@/views/application/marketing.vue"), + component: () => import("@/views/application/marketing/index.vue"), name: "applicationMarketing", meta: { title: "营销中心", @@ -352,14 +352,75 @@ export const constantRoutes: RouteRecordRaw[] = [ }, { path: "index", - component: () => import("@/views/application/index.vue"), + component: () => import("@/views/application/list/index.vue"), name: "applicationIndex", meta: { title: "列表管理", affix: false, - keepAlive: true, + keepAlive: false, + }, + + }, + /** + * 营销中心 start + */ + { + path: "coupon", + component: () => import("@/views/application/marketing/coupon/list.vue"), + name: "coupon", + meta: { + title: "优惠券", + affix: false, + hidden: true }, }, + { + path: "bwc", + component: () => import("@/views/application/marketing/bwc.vue"), + name: "bwc", + meta: { + title: "霸王餐", + affix: false, + hidden: true + }, + }, + { + path: "ad", + component: () => import("@/views/application/list/ad/index.vue"), + name: "ad", + meta: { + title: "广告", + affix: false, + hidden: true + }, + }, + /** 营销中心end */ + + /**列表start */ + + { + path: "lineUplist", + component: () => import("@/views/application/list/lineUplist/index.vue"), + name: "lineUplist", + meta: { + title: "叫号", + affix: false, + hidden: true + }, + }, + { + path: "lineUpRecord", + component: () => import("@/views/application/list/lineUplist/record.vue"), + name: "lineUpRecord", + meta: { + title: "叫号记录", + affix: false, + hidden: true + }, + }, + /**列表end */ + + ], }, { diff --git a/src/views/application/index.vue b/src/views/application/list/ad/index.vue similarity index 100% rename from src/views/application/index.vue rename to src/views/application/list/ad/index.vue diff --git a/src/views/application/list/index.vue b/src/views/application/list/index.vue new file mode 100644 index 0000000..0dbd5ee --- /dev/null +++ b/src/views/application/list/index.vue @@ -0,0 +1,93 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/list/lineUplist/components/basic.vue b/src/views/application/list/lineUplist/components/basic.vue new file mode 100644 index 0000000..1680f11 --- /dev/null +++ b/src/views/application/list/lineUplist/components/basic.vue @@ -0,0 +1,413 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/list/lineUplist/components/index.vue b/src/views/application/list/lineUplist/components/index.vue new file mode 100644 index 0000000..42788db --- /dev/null +++ b/src/views/application/list/lineUplist/components/index.vue @@ -0,0 +1,533 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/list/lineUplist/index.vue b/src/views/application/list/lineUplist/index.vue new file mode 100644 index 0000000..adf6982 --- /dev/null +++ b/src/views/application/list/lineUplist/index.vue @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/list/lineUplist/record.vue b/src/views/application/list/lineUplist/record.vue new file mode 100644 index 0000000..f367356 --- /dev/null +++ b/src/views/application/list/lineUplist/record.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/marketing.vue b/src/views/application/marketing.vue deleted file mode 100644 index 41a40c8..0000000 --- a/src/views/application/marketing.vue +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/views/application/marketing/bwc.vue b/src/views/application/marketing/bwc.vue new file mode 100644 index 0000000..48ecc8a --- /dev/null +++ b/src/views/application/marketing/bwc.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/src/views/application/marketing/coupon/components/coupon_details.vue b/src/views/application/marketing/coupon/components/coupon_details.vue new file mode 100644 index 0000000..c97ea19 --- /dev/null +++ b/src/views/application/marketing/coupon/components/coupon_details.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/views/application/marketing/coupon/couponEnum.js b/src/views/application/marketing/coupon/couponEnum.js new file mode 100644 index 0000000..0b246e5 --- /dev/null +++ b/src/views/application/marketing/coupon/couponEnum.js @@ -0,0 +1,51 @@ +export default { + classType: [ + { + value: "product", + label: "商品券" + }, + { + value: "common", + label: "通用券" + } + ], + type: [ + { + value: "0", + label: "满减" + }, + { + value: "1", + label: "折扣" + } + ], + cycle: [ + { label: "周一", value: "Monday" }, + { label: "周二", value: "Tuesday" }, + { label: "周三", value: "Wednesday" }, + { label: "周四", value: "Thursday" }, + { label: "周五", value: "Friday" }, + { label: "周六", value: "Saturday" }, + { label: "周七", value: "Sunday" } + ], + validityType: [ + { + value: "fixed", + label: "领券后有效期内可用" + }, + { + value: "custom", + label: "固定有效期范围内可用" + } + ], + useTimeType: [ + { + value: "all", + label: "全时段可用" + }, + { + value: "custom", + label: "指定时间段" + } + ] +}; diff --git a/src/views/application/marketing/coupon/list.vue b/src/views/application/marketing/coupon/list.vue new file mode 100644 index 0000000..9183067 --- /dev/null +++ b/src/views/application/marketing/coupon/list.vue @@ -0,0 +1,183 @@ + + + diff --git a/src/views/application/marketing/index.vue b/src/views/application/marketing/index.vue new file mode 100644 index 0000000..bff30b5 --- /dev/null +++ b/src/views/application/marketing/index.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/src/views/devices/config/add.ts b/src/views/devices/config/add.ts index 4cf1e5f..315fe31 100644 --- a/src/views/devices/config/add.ts +++ b/src/views/devices/config/add.ts @@ -1,28 +1,32 @@ -import UserAPI, { type UserForm } from "@/api/system/user"; +import printerApi, { type addRequest } from "@/api/account/printer"; +import { options } from './config' + import type { IModalConfig } from "@/components/CURD/types"; -const modalConfig: IModalConfig = { +const modalConfig: IModalConfig = { pageName: "sys:user", dialog: { - title: "新增用户", + title: "新增打印机", width: 800, draggable: true, }, form: { labelWidth: 100, }, - formAction: UserAPI.add, + formAction: function (data) { + return printerApi.add(data); + }, beforeSubmit(data) { console.log("提交之前处理", data); }, formItems: [ { - label: "用户名", - prop: "username", - rules: [{ required: true, message: "用户名不能为空", trigger: "blur" }], + label: "设备名称", + prop: "name", + rules: [{ required: true, message: "设备名称不能为空", trigger: "blur" }], type: "input", attrs: { - placeholder: "请输入用户名", + placeholder: "请输入设备名称", }, col: { xs: 24, @@ -30,90 +34,127 @@ const modalConfig: IModalConfig = { }, }, { - label: "用户昵称", - prop: "nickname", - rules: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], - type: "input", - attrs: { - placeholder: "请输入用户昵称", - }, - col: { - xs: 24, - sm: 12, - }, - }, - { - label: "所属部门", - prop: "deptId", - rules: [{ required: true, message: "所属部门不能为空", trigger: "blur" }], - type: "tree-select", - attrs: { - placeholder: "请选择所属部门", - data: [], - filterable: true, - "check-strictly": true, - "render-after-expand": false, - }, - }, - { - type: "custom", - label: "性别", - prop: "gender", - initialValue: 1, - }, - { - label: "角色", - prop: "roleIds", - rules: [{ required: true, message: "用户角色不能为空", trigger: "blur" }], type: "select", + label: "类型", + prop: "connectionType", + rules: [{ required: true, message: "请选择设备类型", trigger: "blur" }], attrs: { - placeholder: "请选择", - multiple: true, - }, - options: [], - initialValue: [], - }, - { - type: "input", - label: "手机号码", - prop: "mobile", - rules: [ - { - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, - message: "请输入正确的手机号码", - trigger: "blur", + placeholder: "请选择设备类型", + clearable: true, + style: { + width: "200px", }, - ], - attrs: { - placeholder: "请输入手机号码", - maxlength: 11, + }, + options: options.connectionType, + col: { + xs: 24, + sm: 12, }, }, { - label: "邮箱", - prop: "email", - rules: [ - { - pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/, - message: "请输入正确的邮箱地址", - trigger: "blur", - }, - ], + label: "ip地址", + prop: "address", type: "input", attrs: { - placeholder: "请输入邮箱", - maxlength: 50, + placeholder: "请输入ip地址", + }, + col: { + xs: 24, + sm: 12, }, }, { - label: "状态", - prop: "status", + label: "端口", + prop: "port", + type: "input", + attrs: { + placeholder: "请输入端口", + }, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "select", + label: "打印类型", + prop: "subType", + rules: [{ required: false, message: "请选择打印类型", trigger: "blur" }], + attrs: { + placeholder: "请选择打印类型", + clearable: true, + style: { + width: "200px", + }, + }, + options: options.subType, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "select", + label: "打印机品牌", + prop: "contentType", + rules: [{ required: true, message: "请选择打印机品牌", trigger: "blur" }], + attrs: { + placeholder: "请选择打印机品牌", + clearable: true, + style: { + width: "200px", + }, + }, + options: options.contentType, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "radio-button", + label: "小票尺寸", + prop: "receiptSize", + options: options.receiptSize, + initialValue: options.receiptSize[0].value + }, + { + type: "radio-button", + label: "分类打印", + prop: "classifyPrint", + options: options.classifyPrint, + initialValue: options.classifyPrint[0].value + }, + { type: "radio", - options: [ - { label: "正常", value: 1 }, - { label: "禁用", value: 0 }, - ], + label: "打印数量", + prop: "printQty", + options: options.printQty, + initialValue: options.printQty[0].value + }, + { + type: "radio", + label: "打印方式", + prop: "printMethod", + options: options.printMethod, + initialValue: options.printMethod[0].value + }, + { + type: "checkbox", + label: "打印类型", + prop: "printType", + options: options.printType, + initialValue: options.printType.map(v => v.value) + }, + { + label: "打印机状态", + prop: "status", + type: "switch", initialValue: 1, + attrs: { + activeValue: 1, + inactiveValue: 0, + } }, ], }; diff --git a/src/views/devices/config/config.ts b/src/views/devices/config/config.ts new file mode 100644 index 0000000..661ff13 --- /dev/null +++ b/src/views/devices/config/config.ts @@ -0,0 +1,65 @@ +export const options: optionObject = { + connectionType: [ + { label: "USB", value: 'USB' }, + { label: "网络", value: '网络' }, + { label: "蓝牙", value: '蓝牙' }, + ], + subType: [ + { label: "标签", value: 'label' }, + { label: "小票", value: 'cash' }, + { label: "出品", value: 'kitchen' }, + ], + contentType: [ + { label: "云想印", value: '云想印' }, + { label: "飞鹅", value: '飞鹅' }, + ], + receiptSize: [ + { label: "58mm", value: '58mm' }, + { label: "80mm", value: '80mm' }, + ], + classifyPrint: [ + { label: "所有", value: 0 }, + { label: "部分分类", value: 1 }, + { label: "部分商品", value: 2 }, + ], + printQty: [ + { label: "顾客+商家[2张] ", value: 'c1m1^2' }, + { label: "商家[1张]", value: 'm1^1' }, + { label: "顾客[1张]", value: 'c1^1' }, + { label: "顾客2+商家1[3张]", value: 'c2m1^3' }, + ], + printMethod: [ + { value: "all", label: '全部打印' }, + { value: "normal", label: '仅打印结账单「前台」' }, + { value: "one", label: '仅打印制作单「厨房」' }, + ], + printType: [ + { label: "确认退款单", value: 'refund' }, + { label: "交班单", value: 'handover' }, + { label: "排队取号", value: 'queue' }, + ] +} + +export type optionsType = string; + +export function returnOptions(type: optionsType) { + return options[type] +} + +export function returnOptionsLabel(optionsType: optionsType, value: string | number) { + const options = returnOptions(optionsType); + if (!options) { + return ""; + } + const option = options.find((item) => item.value === value); + return option ? option.label : ""; +} + +export interface options { + label: string; + value: string | number; + [property: string]: any; +} +export interface optionObject { + [property: string]: options[]; +} \ No newline at end of file diff --git a/src/views/devices/config/content.ts b/src/views/devices/config/content.ts index bd20eec..d22e36b 100644 --- a/src/views/devices/config/content.ts +++ b/src/views/devices/config/content.ts @@ -1,14 +1,17 @@ -import UserAPI from "@/api/system/user"; -import RoleAPI from "@/api/system/role"; -import type { UserPageQuery } from "@/api/system/user"; +import printerApi, { type getListRequest } from "@/api/account/printer"; import type { IContentConfig } from "@/components/CURD/types"; -const contentConfig: IContentConfig = { + +const contentConfig: IContentConfig = { pageName: "sys:user", table: { border: true, highlightCurrentRow: true, }, + indexActionData: function (data: any) { + // Add your implementation here + return Promise.resolve(data); + }, pagination: { background: true, layout: "prev,pager,next,jumper,total,sizes", @@ -16,14 +19,11 @@ const contentConfig: IContentConfig = { pageSizes: [10, 20, 30, 50], }, indexAction: function (params) { - return UserAPI.getPage(params); + return printerApi.getList(params); }, - deleteAction: UserAPI.deleteByIds, - importAction(file) { - return UserAPI.import(1, file); + deleteAction: function (id) { + return printerApi.delete(id) }, - exportAction: UserAPI.export, - importTemplate: UserAPI.downloadTemplate, importsAction(data) { // 模拟导入数据 console.log("importsAction", data); @@ -31,7 +31,7 @@ const contentConfig: IContentConfig = { }, exportsAction: async function (params) { // 模拟获取到的是全量数据 - const res = await UserAPI.getPage(params); + const res = await printerApi.getPage(params); console.log("exportsAction", res.list); return res.list; }, diff --git a/src/views/devices/config/content2.ts b/src/views/devices/config/content2.ts deleted file mode 100644 index 3da3999..0000000 --- a/src/views/devices/config/content2.ts +++ /dev/null @@ -1,133 +0,0 @@ -import type { IContentConfig } from "@/components/CURD/types"; - -const contentConfig: IContentConfig = { - pageName: "sys:user", - table: { - showOverflowTooltip: true, - }, - toolbar: [], - indexAction: function (params) { - // 模拟发起网络请求获取列表数据 - console.log("indexAction:", params); - return Promise.resolve({ - total: 2, - list: [ - { - id: 1, - username: "tom", - avatar: "https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif", - percent: 99, - price: 10, - url: "https://www.baidu.com", - icon: "el-icon-setting", - gender: 1, - status: 1, - status2: 1, - sort: 99, - createTime: 1715647982437, - }, - { - id: 2, - username: "jerry", - avatar: "https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif", - percent: 88, - price: 999, - url: "https://www.google.com", - icon: "el-icon-user", - gender: 0, - status: 0, - status2: 0, - sort: 0, - createTime: 1715648977426, - }, - ], - }); - }, - modifyAction(data) { - // 模拟发起网络请求修改字段 - // console.log("modifyAction:", data); - ElMessage.success(JSON.stringify(data)); - return Promise.resolve(null); - }, - cols: [ - { type: "index", width: 50, align: "center" }, - { label: "ID", align: "center", prop: "id", show: false }, - { label: "文本", align: "center", prop: "username" }, - { label: "图片", align: "center", prop: "avatar", templet: "image" }, - { - label: "百分比", - align: "center", - prop: "percent", - templet: "percent", - }, - { - label: "货币符", - align: "center", - prop: "price", - templet: "price", - priceFormat: "$", - }, - { label: "链接", align: "center", prop: "url", width: 180, templet: "url" }, - { label: "图标", align: "center", prop: "icon", templet: "icon" }, - { - label: "列表值", - align: "center", - prop: "gender", - templet: "list", - selectList: { "0": "女", "1": "男" }, - }, - { - label: "自定义", - align: "center", - prop: "status", - templet: "custom", - slotName: "status", - }, - { - label: "Switch", - align: "center", - prop: "status2", - templet: "switch", - activeValue: 1, - inactiveValue: 0, - activeText: "启用", - inactiveText: "禁用", - }, - { - label: "输入框", - align: "center", - prop: "sort", - templet: "input", - inputType: "number", - }, - { - label: "日期格式化", - align: "center", - prop: "createTime", - minWidth: 120, - templet: "date", - dateFormat: "YYYY/MM/DD HH:mm:ss", - }, - { - label: "操作栏", - align: "center", - fixed: "right", - width: 220, - templet: "tool", - operat: [ - { - name: "reset_pwd", - auth: "password:reset", - icon: "refresh-left", - text: "重置密码", - type: "primary", - render(row) { - return row.id === 1; - }, - }, - ], - }, - ], -}; - -export default contentConfig; diff --git a/src/views/devices/config/edit.ts b/src/views/devices/config/edit.ts index bbc0f61..7f3f625 100644 --- a/src/views/devices/config/edit.ts +++ b/src/views/devices/config/edit.ts @@ -1,117 +1,163 @@ -import UserAPI, { type UserForm } from "@/api/system/user"; -import type { IModalConfig } from "@/components/CURD/types"; -import { DeviceEnum } from "@/enums/DeviceEnum"; -import { useAppStore } from "@/store"; +import printerApi, { type editRequest } from "@/api/account/printer"; +import { options } from './config' -const modalConfig: IModalConfig = { +import type { IModalConfig } from "@/components/CURD/types"; + +const modalConfig: IModalConfig = { pageName: "sys:user", - component: "drawer", - drawer: { - title: "修改用户", - size: useAppStore().device === DeviceEnum.MOBILE ? "80%" : 500, + dialog: { + title: "修改打印机", + width: 800, + draggable: true, + }, + form: { + labelWidth: 100, }, - pk: "id", formAction: function (data) { - return UserAPI.update(data.id as number, data); + return printerApi.edit(data); }, beforeSubmit(data) { console.log("提交之前处理", data); }, formItems: [ { - label: "用户名", - prop: "username", - rules: [{ required: true, message: "用户名不能为空", trigger: "blur" }], + label: "设备名称", + prop: "name", + rules: [{ required: true, message: "设备名称不能为空", trigger: "blur" }], type: "input", attrs: { - placeholder: "请输入用户名", - readonly: true, + placeholder: "请输入设备名称", + }, + col: { + xs: 24, + sm: 12, }, }, { - label: "用户昵称", - prop: "nickname", - rules: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], - type: "input", - attrs: { - placeholder: "请输入用户昵称", - }, - }, - { - label: "所属部门", - prop: "deptId", - rules: [{ required: true, message: "所属部门不能为空", trigger: "blur" }], - type: "tree-select", - attrs: { - placeholder: "请选择所属部门", - data: [], - filterable: true, - "check-strictly": true, - "render-after-expand": false, - }, - }, - { - type: "custom", - label: "性别", - prop: "gender", - initialValue: 1, - }, - { - label: "角色", - prop: "roleIds", - rules: [{ required: true, message: "用户角色不能为空", trigger: "blur" }], type: "select", + label: "类型", + prop: "connectionType", + rules: [{ required: true, message: "请选择设备类型", trigger: "blur" }], attrs: { - placeholder: "请选择", - multiple: true, - }, - options: [], - initialValue: [], - }, - { - type: "input", - label: "手机号码", - prop: "mobile", - rules: [ - { - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, - message: "请输入正确的手机号码", - trigger: "blur", + placeholder: "请选择设备类型", + clearable: true, + style: { + width: "200px", }, - ], - attrs: { - placeholder: "请输入手机号码", - maxlength: 11, + }, + options: options.connectionType, + col: { + xs: 24, + sm: 12, }, }, { - label: "邮箱", - prop: "email", - rules: [ - { - pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/, - message: "请输入正确的邮箱地址", - trigger: "blur", - }, - ], + label: "ip地址", + prop: "address", type: "input", attrs: { - placeholder: "请输入邮箱", - maxlength: 50, + placeholder: "请输入ip地址", + }, + col: { + xs: 24, + sm: 12, }, }, { - label: "状态", + label: "端口", + prop: "port", + type: "input", + attrs: { + placeholder: "请输入端口", + }, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "select", + label: "打印类型", + prop: "subType", + rules: [{ required: false, message: "请选择打印类型", trigger: "blur" }], + attrs: { + placeholder: "请选择打印类型", + clearable: true, + style: { + width: "200px", + }, + }, + options: options.subType, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "select", + label: "打印机品牌", + prop: "contentType", + rules: [{ required: true, message: "请选择打印机品牌", trigger: "blur" }], + attrs: { + placeholder: "请选择打印机品牌", + clearable: true, + style: { + width: "200px", + }, + }, + options: options.contentType, + col: { + xs: 24, + sm: 12, + }, + }, + { + type: "radio-button", + label: "小票尺寸", + prop: "receiptSize", + options: options.receiptSize, + initialValue: options.receiptSize[0].value + }, + { + type: "radio-button", + label: "分类打印", + prop: "classifyPrint", + options: options.classifyPrint, + initialValue: options.classifyPrint[0].value + }, + { + type: "radio", + label: "打印数量", + prop: "printQty", + options: options.printQty, + initialValue: options.printQty[0].value + }, + { + type: "radio", + label: "打印方式", + prop: "printMethod", + options: options.printMethod, + initialValue: options.printMethod[0].value + }, + { + type: "checkbox", + label: "打印类型", + prop: "printType", + options: options.printType, + initialValue: options.printType.map(v => v.value) + }, + { + label: "打印机状态", prop: "status", type: "switch", + initialValue: 1, attrs: { - activeText: "正常", - inactiveText: "禁用", activeValue: 1, inactiveValue: 0, - }, + } }, ], }; +// 如果有异步数据会修改配置的,推荐用reactive包裹,而纯静态配置的可以直接导出 export default reactive(modalConfig); diff --git a/src/views/devices/config/search.ts b/src/views/devices/config/search.ts index 6c2931e..0a6c9c6 100644 --- a/src/views/devices/config/search.ts +++ b/src/views/devices/config/search.ts @@ -1,13 +1,12 @@ -import DeptAPI from "@/api/system/dept"; import type { ISearchConfig } from "@/components/CURD/types"; - +import { options } from './config' const searchConfig: ISearchConfig = { pageName: "sys:user", formItems: [ { type: "input", label: "设备名称", - prop: "keywords", + prop: "name", attrs: { placeholder: "请输入设备名称", clearable: true, @@ -18,19 +17,16 @@ const searchConfig: ISearchConfig = { }, { type: "select", - label: "状态", - prop: "status", + label: "类型", + prop: "connectionType", attrs: { - placeholder: "全部", + placeholder: "请选择设备类型", clearable: true, style: { - width: "100px", + width: "200px", }, }, - options: [ - { label: "启用", value: 1 }, - { label: "禁用", value: 0 }, - ], + options: options.connectionType, }, ], diff --git a/src/views/devices/printer.vue b/src/views/devices/printer.vue index ff418d1..b1c2a85 100644 --- a/src/views/devices/printer.vue +++ b/src/views/devices/printer.vue @@ -1,64 +1,70 @@