@qynpm/ui 0.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +183 -8
  2. package/dist/_virtual/plugin-vue_export-helper.cjs +1 -0
  3. package/dist/_virtual/plugin-vue_export-helper.mjs +9 -0
  4. package/dist/index.cjs +1 -0
  5. package/dist/index.mjs +17 -0
  6. package/dist/lib/dialog/index.vue.cjs +1 -0
  7. package/dist/lib/dialog/index.vue.mjs +326 -0
  8. package/dist/lib/index.cjs +1 -0
  9. package/dist/lib/index.mjs +40 -0
  10. package/dist/lib/qy-action-bar/index.vue.cjs +1 -0
  11. package/dist/lib/qy-action-bar/index.vue.mjs +56 -0
  12. package/dist/lib/qy-form-section/index.vue.cjs +1 -0
  13. package/dist/lib/qy-form-section/index.vue.mjs +89 -0
  14. package/dist/lib/qy-input/index.vue.cjs +1 -0
  15. package/dist/lib/qy-input/index.vue.mjs +142 -0
  16. package/dist/lib/qy-record-quote-search/index.vue.cjs +1 -0
  17. package/dist/lib/qy-record-quote-search/index.vue.mjs +206 -0
  18. package/dist/lib/qy-search-input/index.vue.cjs +1 -0
  19. package/dist/lib/qy-search-input/index.vue.mjs +277 -0
  20. package/dist/lib/qy-select/index.vue.cjs +1 -0
  21. package/dist/lib/qy-select/index.vue.mjs +137 -0
  22. package/dist/lib/remark-image/index.vue.cjs +1 -0
  23. package/dist/lib/remark-image/index.vue.mjs +198 -0
  24. package/dist/lib/remark-image/utils.cjs +1 -0
  25. package/dist/lib/remark-image/utils.mjs +22 -0
  26. package/dist/lib/upload/index.vue.cjs +1 -0
  27. package/dist/lib/upload/index.vue.mjs +382 -0
  28. package/dist/lib/utils/auth.cjs +1 -0
  29. package/dist/lib/utils/auth.mjs +8 -0
  30. package/dist/lib/utils/install.cjs +1 -0
  31. package/dist/lib/utils/install.mjs +8 -0
  32. package/dist/node_modules/.pnpm/js-cookie@3.0.1/node_modules/js-cookie/dist/js.cookie.cjs +1 -0
  33. package/dist/node_modules/.pnpm/js-cookie@3.0.1/node_modules/js-cookie/dist/js.cookie.mjs +74 -0
  34. package/dist/qy-action-bar/index.cjs +1 -0
  35. package/dist/qy-action-bar/index.mjs +6 -0
  36. package/dist/qy-dialog/index.cjs +1 -0
  37. package/dist/qy-dialog/index.mjs +6 -0
  38. package/dist/qy-form-section/index.cjs +1 -0
  39. package/dist/qy-form-section/index.mjs +6 -0
  40. package/dist/qy-input/index.cjs +1 -0
  41. package/dist/qy-input/index.mjs +6 -0
  42. package/dist/qy-record-quote-search/index.cjs +1 -0
  43. package/dist/qy-record-quote-search/index.mjs +6 -0
  44. package/dist/qy-remark-image/index.cjs +2 -0
  45. package/dist/qy-remark-image/index.mjs +7 -0
  46. package/dist/qy-search-input/index.cjs +1 -0
  47. package/dist/qy-search-input/index.mjs +6 -0
  48. package/dist/qy-select/index.cjs +1 -0
  49. package/dist/qy-select/index.mjs +6 -0
  50. package/dist/qy-upload/index.cjs +1 -0
  51. package/dist/qy-upload/index.mjs +6 -0
  52. package/index.d.ts +16 -4
  53. package/package.json +60 -7
  54. package/qy-action-bar/index.d.ts +5 -0
  55. package/qy-action-bar/index.js +4 -0
  56. package/qy-dialog/index.d.ts +5 -0
  57. package/qy-dialog/index.js +4 -0
  58. package/qy-form-section/index.d.ts +5 -0
  59. package/qy-form-section/index.js +4 -0
  60. package/qy-input/index.d.ts +5 -0
  61. package/qy-input/index.js +4 -0
  62. package/qy-record-quote-search/index.d.ts +5 -0
  63. package/qy-record-quote-search/index.js +4 -0
  64. package/qy-remark-image/index.d.ts +5 -0
  65. package/qy-remark-image/index.js +4 -0
  66. package/qy-search-input/index.d.ts +5 -0
  67. package/qy-search-input/index.js +4 -0
  68. package/qy-select/index.d.ts +5 -0
  69. package/qy-select/index.js +4 -0
  70. package/qy-upload/index.d.ts +5 -0
  71. package/qy-upload/index.js +4 -0
  72. package/dist/ui.es.js +0 -994
  73. package/dist/ui.umd.js +0 -2
  74. package/index.js +0 -9
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @qynpm/ui
2
2
 
3
- 起印体系内抽离出来的 Vue 3 UI 组件包,当前主要包含上传组件和弹窗组件。
3
+ 起印体系内抽离出来的 Vue 3 UI 组件包,当前主要包含基础输入组件、选择器组件、区块容器、底部操作栏,以及上传、弹窗、备注图文等通用能力。
4
4
 
5
5
  ## 安装
6
6
 
@@ -32,12 +32,36 @@ app.use(QyUI)
32
32
  也可以按需引入:
33
33
 
34
34
  ```ts
35
- import { Upload, QyDialog } from '@qynpm/ui'
35
+ import {
36
+ QyUpload,
37
+ QyDialog,
38
+ QyRemarkImage,
39
+ QyInput,
40
+ QySelect,
41
+ QyFormSection,
42
+ QyActionBar,
43
+ QySearchInput,
44
+ QyRecordQuoteSearch
45
+ } from '@qynpm/ui'
46
+ ```
47
+
48
+ 也可以按需引入单个组件入口:
49
+
50
+ ```ts
51
+ import QyInput from '@qynpm/ui/qy-input'
52
+ import QySelect from '@qynpm/ui/qy-select'
53
+ import QyFormSection from '@qynpm/ui/qy-form-section'
54
+ import QyActionBar from '@qynpm/ui/qy-action-bar'
55
+ import QySearchInput from '@qynpm/ui/qy-search-input'
56
+ import QyRecordQuoteSearch from '@qynpm/ui/qy-record-quote-search'
57
+ import QyDialog from '@qynpm/ui/qy-dialog'
58
+ import QyUpload from '@qynpm/ui/qy-upload'
59
+ import QyRemarkImage from '@qynpm/ui/qy-remark-image'
36
60
  ```
37
61
 
38
62
  ## 组件说明
39
63
 
40
- ### `Upload`
64
+ ### `QyUpload`
41
65
 
42
66
  上传组件,支持:
43
67
 
@@ -70,6 +94,74 @@ import { Upload, QyDialog } from '@qynpm/ui'
70
94
  - 自定义 footer
71
95
  - 移动端自动全屏
72
96
 
97
+ ### `QyInput`
98
+
99
+ 输入组件,第一版定位为 `ElInput` 的轻量包装层,重点支持:
100
+
101
+ - 保持和 `ElInput` 接近的使用方式
102
+ - `removeSpace`
103
+ - `trimMode`
104
+ - `enter`
105
+ - `textarea`
106
+ - 兼容常见 slots 与 expose 方法
107
+
108
+ ### `QySelect`
109
+
110
+ 选择器组件,第一版定位为 `ElSelect` 的轻量包装层,重点支持:
111
+
112
+ - `options` 直出
113
+ - `labelKey / valueKey / disabledKey` 映射
114
+ - 单选 / 多选
115
+ - `collapse-tags`
116
+ - 默认弹层挂载策略
117
+ - 保留原生 slot 扩展
118
+
119
+ ### `QyFormSection`
120
+
121
+ 区块容器组件,适合录单页面的表单区块外壳,重点支持:
122
+
123
+ - 标题
124
+ - 描述
125
+ - 操作区 slot
126
+ - 提示区
127
+ - 简单折叠
128
+ - 统一边框、背景和间距
129
+
130
+ ### `QyActionBar`
131
+
132
+ 底部操作栏组件,适合录单页面底部按钮区,重点支持:
133
+
134
+ - sticky 吸底
135
+ - 左右分区
136
+ - 窄屏换行
137
+ - 边框 / 阴影
138
+ - 底部安全区适配
139
+
140
+ ### `QySearchInput`
141
+
142
+ 搜索输入组件,支持:
143
+
144
+ - 基于 `ElAutocomplete` 的等价封装
145
+ - 搜索按钮
146
+ - 回车搜索
147
+ - 本地建议项
148
+ - 远程建议项
149
+ - 兼容 `fetch-suggestions(queryString, cb)` 回调风格
150
+ - 高亮匹配词
151
+ - 默认使用 Element Plus 弹层挂载策略,避免被父级裁剪
152
+ - 平铺项和分组项两种建议结构
153
+
154
+ ### `QyRecordQuoteSearch`
155
+
156
+ 录单报价单号搜索组件,支持:
157
+
158
+ - 报价单号输入
159
+ - 报价单号提取与规范化
160
+ - 搜索触发
161
+ - 建议项选择
162
+ - 局部状态提示
163
+ - `loading-change / success / error` 事件
164
+
73
165
  ## 样式说明
74
166
 
75
167
  - 包内样式会跟随构建产物一起注入
@@ -78,11 +170,11 @@ import { Upload, QyDialog } from '@qynpm/ui'
78
170
 
79
171
  ## 使用示例
80
172
 
81
- ### Upload
173
+ ### QyUpload
82
174
 
83
175
  ```vue
84
176
  <template>
85
- <Upload
177
+ <QyUpload
86
178
  api="/permission-api/common/uploads"
87
179
  token-key="Admin-Token"
88
180
  @change="handleChange"
@@ -94,9 +186,86 @@ import { Upload, QyDialog } from '@qynpm/ui'
94
186
 
95
187
  ```vue
96
188
  <template>
97
- <QyDialog title="标题" @confirm="handleConfirm">
98
- 内容区域
99
- </QyDialog>
189
+ <QyDialog title="标题" @confirm="handleConfirm">
190
+ 内容区域
191
+ </QyDialog>
192
+ </template>
193
+ ```
194
+
195
+ ### QyInput
196
+
197
+ ```vue
198
+ <template>
199
+ <QyInput
200
+ v-model="quoteOrderCode"
201
+ remove-space
202
+ trim-mode="blur"
203
+ placeholder="填写报价单,回车搜索"
204
+ @enter="handleSearch"
205
+ />
206
+ </template>
207
+ ```
208
+
209
+ ### QySelect
210
+
211
+ ```vue
212
+ <template>
213
+ <QySelect
214
+ v-model="shopCode"
215
+ :options="shopOptions"
216
+ placeholder="请选择店铺"
217
+ />
218
+ </template>
219
+ ```
220
+
221
+ ### QyFormSection
222
+
223
+ ```vue
224
+ <template>
225
+ <QyFormSection title="订单信息" description="这里放订单表单区块">
226
+ <el-form>...</el-form>
227
+ </QyFormSection>
228
+ </template>
229
+ ```
230
+
231
+ ### QyActionBar
232
+
233
+ ```vue
234
+ <template>
235
+ <QyActionBar>
236
+ <template #left>
237
+ <el-button plain>开票</el-button>
238
+ </template>
239
+ <template #right>
240
+ <el-button>保存</el-button>
241
+ <el-button type="primary">提交</el-button>
242
+ </template>
243
+ </QyActionBar>
244
+ </template>
245
+ ```
246
+
247
+ ### QySearchInput
248
+
249
+ ```vue
250
+ <template>
251
+ <QySearchInput
252
+ v-model="keyword"
253
+ :fetch-suggestions-method="querySearch"
254
+ @search="handleSearch"
255
+ />
256
+ </template>
257
+ ```
258
+
259
+ ### QyRecordQuoteSearch
260
+
261
+ ```vue
262
+ <template>
263
+ <QyRecordQuoteSearch
264
+ v-model="quoteOrderCode"
265
+ :fetch-suggestions="fetchQuoteSuggestions"
266
+ :search-method="handleQuoteSearch"
267
+ @search="handleSearch"
268
+ />
100
269
  </template>
101
270
  ```
102
271
 
@@ -104,6 +273,12 @@ import { Upload, QyDialog } from '@qynpm/ui'
104
273
 
105
274
  - 当前版本更适合体系内拆包复用
106
275
  - 上传默认值仍然保留了现有项目约定,后续如果完全独立对外,可以再继续抽离
276
+ - `QyInput` 第一版优先兼容 `ElInput`,后续再逐步补统一输入规则
277
+ - `QySelect` 第一版优先兼容 `ElSelect`,不内置远程字典或复杂请求能力
278
+ - `QyFormSection` 只负责区块壳,不替代 `@qiyin/form` 的 schema / 校验能力
279
+ - `QyActionBar` 只负责底部布局壳,不负责编排按钮业务逻辑
280
+ - `QySearchInput` 第一版已经覆盖建议搜索场景,但仍然不承接页面级副作用
281
+ - `QyRecordQuoteSearch` 只承接报价单搜索入口逻辑,不直接改整页录单状态
107
282
 
108
283
  ## 当前联调说明
109
284
 
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=(e,o)=>{const t=e.__vccOpts||e;for(const[r,s]of o)t[r]=s;return t};exports.default=u;
@@ -0,0 +1,9 @@
1
+ const s = (t, e) => {
2
+ const o = t.__vccOpts || t;
3
+ for (const [r, c] of e)
4
+ o[r] = c;
5
+ return o;
6
+ };
7
+ export {
8
+ s as default
9
+ };
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./lib/index.cjs"),a=require("./lib/remark-image/utils.cjs");exports.QyActionBar=e.QyActionBar;exports.QyDialog=e.QyDialog;exports.QyFormSection=e.QyFormSection;exports.QyInput=e.QyInput;exports.QyRecordQuoteSearch=e.QyRecordQuoteSearch;exports.QyRemarkImage=e.QyRemarkImage;exports.QySearchInput=e.QySearchInput;exports.QySelect=e.QySelect;exports.QyUpload=e.QyUpload;exports.default=e.default;exports.formatRemarkText=a.formatRemarkText;exports.parseRemarkText=a.parseRemarkText;exports.parseRemarkWithImage=a.parseRemarkWithImage;
package/dist/index.mjs ADDED
@@ -0,0 +1,17 @@
1
+ import { QyActionBar as a, QyDialog as t, QyFormSection as o, QyInput as m, QyRecordQuoteSearch as Q, QyRemarkImage as y, QySearchInput as p, QySelect as c, QyUpload as R, default as f } from "./lib/index.mjs";
2
+ import { formatRemarkText as k, parseRemarkText as l, parseRemarkWithImage as n } from "./lib/remark-image/utils.mjs";
3
+ export {
4
+ a as QyActionBar,
5
+ t as QyDialog,
6
+ o as QyFormSection,
7
+ m as QyInput,
8
+ Q as QyRecordQuoteSearch,
9
+ y as QyRemarkImage,
10
+ p as QySearchInput,
11
+ c as QySelect,
12
+ R as QyUpload,
13
+ f as default,
14
+ k as formatRemarkText,
15
+ l as parseRemarkText,
16
+ n as parseRemarkWithImage
17
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const Z=require("element-plus/es"),e=require("vue"),U=require("clsx"),A=require("element-plus"),H=require("@vueuse/core");;/* empty css */const X={class:"text-lg flex items-center pt-2 pl-[var(--content-padding)]"},W={key:0},Y={key:1},G={key:0,class:"icon-[material-symbols--square-outline-rounded]",role:"img","aria-hidden":"true"},J={key:1,class:"icon-[tdesign--fullscreen-exit-1]",role:"img","aria-hidden":"true"},K={key:0,class:"fixed -right-12 top-2 h-9 w-9 hover:bg-gray-600/80 transition-all"},Q={class:"flex justify-between h-[var(--footer-height)] px-[var(--content-padding)] items-center"},ee={class:"flex items-center justify-between w-full pl-1 pr-4 h-full ml-2"},te={class:"flex items-center gap-2"},oe={class:"text-sm text-gray-700 truncate max-w-[200px]"},le={class:"flex items-center gap-2"},L=5,C=2e3,ne=e.defineComponent({__name:"index",props:e.mergeModels({layout:{type:[Array,String,Boolean],default:()=>["confirm","cancel"]},fullscreen:{type:Boolean,default:!1},showFullscreen:{type:Boolean,default:!1},confirmProps:{default:()=>({})},size:{default:"default"},zIndex:{default:2e3}},{modelValue:{default:!0},modelModifiers:{}}),emits:e.mergeModels(["confirm","cancel","close","opened","ok"],["update:modelValue"]),setup(E,{expose:O,emit:j}){const l=E,y=e.useSlots(),M=e.ref(!0),v=e.ref(!1),b=e.ref(C),P=H.useBreakpoints({mobile:0,tablet:640,laptop:1024,desktop:1280}).isSmaller("tablet"),w=e.computed(()=>{if(Array.isArray(l.layout))return l.layout;if(typeof l.layout=="string")return l.layout.split(",").map(o=>o.trim())}),B=e.computed(()=>({CancelButton:e.createVNode(I),ConfirmButton:e.createVNode(S)})),z=e.computed(()=>y.footer||l.layout!==!1),h=e.ref(!1),s=e.ref(l.showFullscreen&&P?!0:l.fullscreen),d=j,x=e.useModel(E,"modelValue");e.watchEffect(()=>{x.value&&(h.value=!1)}),O({});const k=e.useAttrs(),i=`qy-dialog-${Math.random().toString(36).slice(2,11)}`,a=e.ref(!1),u=e.ref(null);window.minimizedCount||(window.minimizedCount=0);const{x:q,y:_}=H.useDraggable(u,{initialValue:{x:5,y:window.innerHeight-100-(window.minimizedCount||0)*60},onMove(o){var t;(t=u.value)==null||t.classList.add("dragging"),document.body.classList.add("qy-dialog--dragging"),q.value=Math.max(0,Math.min(window.innerWidth-300,o.x)),_.value=Math.max(0,Math.min(window.innerHeight-50,o.y))},onEnd(){var o;(o=u.value)==null||o.classList.remove("dragging"),document.body.classList.remove("qy-dialog--dragging")}}),T=e.computed(()=>({transform:`translate(${q.value}px, ${_.value}px)`,willChange:"transform"}));function V(o){const t=o.target,{scrollTop:n,scrollHeight:r,clientHeight:f}=t;M.value=n<=L,v.value=r-(n+f)<=L}function F(){document.querySelector(`.${i}.el-dialog`).addEventListener("scroll",V),m(),d("opened")}function N(){s.value=!s.value,m()}function c(){h.value||(h.value=!0,a.value=!1,x.value=!1,d("cancel"),d("close"))}function R(o){l.showFullscreen&&o.detail>=2&&N()}function S(){return e.h(A.ElButton,{...e.unref(l.confirmProps),type:"primary",class:"dialog__footerBtn",onClick:()=>{d("confirm"),d("ok")}},()=>e.unref(l.confirmProps).title||"确 认")}function I(){return e.h(A.ElButton,{class:"dialog__footerBtn",onClick:()=>c()},()=>"取 消")}e.onMounted(()=>{typeof window.qyDialogMaxZIndex>"u"&&(window.qyDialogMaxZIndex=C),m()});function m(){var $;const o=Array.from(document.querySelectorAll(".el-overlay")).filter(p=>window.getComputedStyle(p).display!=="none"&&!p.classList.contains("is-message")),t=($=document.querySelector(`.${i}`))==null?void 0:$.closest(".el-overlay"),n=document.querySelector(`.${i}.el-dialog`);if(!t||!n)return;const r=C;window.qyDialogMaxZIndex=window.qyDialogMaxZIndex||r;const g=Math.max(window.qyDialogMaxZIndex,...o.map(p=>parseInt(window.getComputedStyle(p).zIndex||r.toString())))+2;window.qyDialogMaxZIndex=g,e.nextTick(()=>{t.style.zIndex=g.toString(),n.style.zIndex=(g+1).toString(),b.value=g+1})}e.onUnmounted(()=>{const o=document.querySelector(`.${i} .qy-dialog__wrapper-container`);o&&o.removeEventListener("scroll",V),a.value&&window.minimizedCount--});function D(){var t;a.value=!a.value;const o=(t=document.querySelector(`.${i}`))==null?void 0:t.closest(".el-overlay");a.value?(o.style.display="none",window.minimizedCount++,_.value=window.innerHeight-50-(window.minimizedCount||0)*60):(o.style.display="block",window.minimizedCount--,m())}return(o,t)=>{const n=e.resolveComponent("Close"),r=Z.ElIcon,f=Z.ElDialog;return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(f,e.mergeProps({ref:"dialogRef",class:["qy-dialog",[l.size==="small"&&"[&_.el-dialog__header]:!hidden",i]],"model-value":x.value,"align-center":"","append-to-body":"",style:{"--el-dialog-padding-primary":0},"show-close":!1,fullscreen:s.value,"z-index":b.value,onClosed:c,onOpened:F,draggable:""},e.unref(k)),e.createSlots({header:e.withCtx(()=>[l.size==="default"?(e.openBlock(),e.createElementBlock("div",{key:0,style:e.normalizeStyle({borderBottom:"1px solid",borderColor:M.value?"transparent":"var(--block-outline-color)",transition:"border-color .2s linear"}),class:"flex justify-between h-[var(--header-height)]",onDblclick:R},[e.createElementVNode("div",X,[e.unref(y).header?e.unref(y).header?(e.openBlock(),e.createElementBlock("div",Y,[e.renderSlot(o.$slots,"header")])):e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",W,e.toDisplayString(e.unref(k).title),1))]),e.createElementVNode("div",{class:"flex",onMousedown:t[3]||(t[3]=e.withModifiers(()=>{},["stop"]))},[l.size==="default"?(e.openBlock(),e.createElementBlock("div",{key:0,class:"qy-dialog__btn qy-dialog__btn--default",onClick:e.withModifiers(D,["stop"]),onMousedown:t[0]||(t[0]=e.withModifiers(()=>{},["stop"]))},t[4]||(t[4]=[e.createElementVNode("span",{class:"icon-[material-symbols--minimize] text-xl mb-3",role:"img","aria-hidden":"true"},null,-1)]),32)):e.createCommentVNode("",!0),l.showFullscreen?(e.openBlock(),e.createElementBlock("div",{key:1,class:"qy-dialog__btn qy-dialog__btn--default",onClick:e.withModifiers(N,["stop"]),onMousedown:t[1]||(t[1]=e.withModifiers(()=>{},["stop"]))},[s.value?(e.openBlock(),e.createElementBlock("span",J)):(e.openBlock(),e.createElementBlock("span",G))],32)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:"qy-dialog__btn qy-dialog__btn--danger",onClick:e.withModifiers(c,["stop"]),onMousedown:t[2]||(t[2]=e.withModifiers(()=>{},["stop"]))},t[5]||(t[5]=[e.createElementVNode("span",{class:"icon-[ri--close-line] text-xl",role:"img","aria-hidden":"true"},null,-1)]),32)],32)],36)):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(["qy-dialog__wrapper",e.unref(U)(s.value&&"qy-dialog__wrapper--fullscreen")]),style:e.normalizeStyle({maxHeight:z.value?"calc(100vh - var(--header-height) - var(--footer-height) - var(--sides-gap))":"calc(100vh - var(--header-height) - var(--sides-gap))",padding:l.size==="small"?"var(--small-content-padding)":"var(--content-padding)"})},[l.size==="small"?(e.openBlock(),e.createElementBlock("div",K,[e.createVNode(r,{size:36,class:"cursor-pointer text-gray-100 active:scale-75 rounded-sm transition-all",onClick:c},{default:e.withCtx(()=>[e.createVNode(n)]),_:1})])):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"default")],6)]),_:2},[!o.$slots.footer&&Array.isArray(w.value)?{name:"footer",fn:e.withCtx(()=>[e.createElementVNode("div",Q,[e.createElementVNode("div",null,[e.renderSlot(o.$slots,"footer-left")]),e.createElementVNode("div",{class:e.normalizeClass([{"qy-dialog__footer--outline":v.value},"qy-dialog__footer flex items-center justify-end"])},[w.value.includes("cancel")?(e.openBlock(),e.createBlock(I,{key:0})):e.createCommentVNode("",!0),w.value.includes("confirm")?(e.openBlock(),e.createBlock(S,{key:1})):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"footer-append")],2)])]),key:"0"}:z.value?{name:"footer",fn:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass([{"qy-dialog__footer--outline":v.value},"qy-dialog__footer px-[var(--content-padding)] min-h-[var(--footer-height)] flex items-center justify-end"])},[e.renderSlot(o.$slots,"footer",{layouts:B.value,layoutsNode:Object.values(B.value)})],2)]),key:"1"}:void 0]),1040,["class","model-value","fullscreen","z-index"]),e.withDirectives(e.createElementVNode("div",{ref_key:"minimizedRef",ref:u,class:"fixed left-0 top-0 bg-white rounded shadow-lg cursor-pointer z-[9999] hover:bg-gray-50",style:e.normalizeStyle([T.value,{width:"300px",height:"50px","will-change":"transform"}])},[e.createElementVNode("div",ee,[e.createElementVNode("div",te,[t[6]||(t[6]=e.createElementVNode("div",{class:"icon-[mdi--window-restore] text-gray-600"},null,-1)),e.createElementVNode("span",oe,e.toDisplayString(e.unref(k).title),1)]),e.createElementVNode("div",le,[e.createElementVNode("div",{class:"p-1 hover:bg-gray-200 rounded",onClick:e.withModifiers(D,["stop"])},t[7]||(t[7]=[e.createElementVNode("div",{class:"icon-[mdi--window-maximize] text-gray-600"},null,-1)])),e.createElementVNode("div",{class:"p-1 hover:bg-red-100 rounded",onClick:e.withModifiers(c,["stop"])},t[8]||(t[8]=[e.createElementVNode("div",{class:"icon-[mdi--close] text-red-600"},null,-1)]))])])],4),[[e.vShow,a.value]])])}}});exports.default=ne;
@@ -0,0 +1,326 @@
1
+ import { ElDialog as ae, ElIcon as se } from "element-plus/es";
2
+ import { defineComponent as re, mergeModels as W, useSlots as de, ref as d, computed as C, createVNode as v, useModel as ue, watchEffect as ce, useAttrs as me, h as Y, unref as s, onMounted as fe, nextTick as ge, onUnmounted as pe, resolveComponent as ye, createElementBlock as i, openBlock as n, withDirectives as ve, mergeProps as we, createSlots as he, withCtx as w, createElementVNode as t, normalizeStyle as $, normalizeClass as Z, createCommentVNode as u, renderSlot as h, toDisplayString as G, withModifiers as a, createBlock as J, vShow as xe } from "vue";
3
+ import _e from "clsx";
4
+ import { ElButton as K } from "element-plus";
5
+ import { useBreakpoints as be, useDraggable as ke } from "@vueuse/core";
6
+ /* empty css */
7
+ const ze = { class: "text-lg flex items-center pt-2 pl-[var(--content-padding)]" }, Ce = { key: 0 }, qe = { key: 1 }, Me = {
8
+ key: 0,
9
+ class: "icon-[material-symbols--square-outline-rounded]",
10
+ role: "img",
11
+ "aria-hidden": "true"
12
+ }, Se = {
13
+ key: 1,
14
+ class: "icon-[tdesign--fullscreen-exit-1]",
15
+ role: "img",
16
+ "aria-hidden": "true"
17
+ }, Ie = {
18
+ key: 0,
19
+ class: "fixed -right-12 top-2 h-9 w-9 hover:bg-gray-600/80 transition-all"
20
+ }, Be = { class: "flex justify-between h-[var(--footer-height)] px-[var(--content-padding)] items-center" }, De = { class: "flex items-center justify-between w-full pl-1 pr-4 h-full ml-2" }, Ee = { class: "flex items-center gap-2" }, $e = { class: "text-sm text-gray-700 truncate max-w-[200px]" }, Ze = { class: "flex items-center gap-2" }, Q = 5, A = 2e3, Te = re({
21
+ __name: "index",
22
+ props: /* @__PURE__ */ W({
23
+ layout: { type: [Array, String, Boolean], default: () => ["confirm", "cancel"] },
24
+ fullscreen: { type: Boolean, default: !1 },
25
+ showFullscreen: { type: Boolean, default: !1 },
26
+ confirmProps: { default: () => ({}) },
27
+ size: { default: "default" },
28
+ zIndex: { default: 2e3 }
29
+ }, {
30
+ modelValue: { default: !0 },
31
+ modelModifiers: {}
32
+ }),
33
+ emits: /* @__PURE__ */ W(["confirm", "cancel", "close", "opened", "ok"], ["update:modelValue"]),
34
+ setup(H, { expose: ee, emit: oe }) {
35
+ const l = H, q = de(), L = d(!0), M = d(!1), O = d(A), te = be({
36
+ mobile: 0,
37
+ tablet: 640,
38
+ laptop: 1024,
39
+ desktop: 1280
40
+ }).isSmaller("tablet"), S = C(() => {
41
+ if (Array.isArray(l.layout)) return l.layout;
42
+ if (typeof l.layout == "string")
43
+ return l.layout.split(",").map((o) => o.trim());
44
+ }), V = C(() => ({
45
+ CancelButton: v(R),
46
+ ConfirmButton: v(P)
47
+ })), j = C(() => q.footer || l.layout !== !1), I = d(!1), g = d(
48
+ l.showFullscreen && te ? !0 : l.fullscreen
49
+ ), p = oe, B = ue(H, "modelValue");
50
+ ce(() => {
51
+ B.value && (I.value = !1);
52
+ }), ee({});
53
+ const D = me(), c = `qy-dialog-${Math.random().toString(36).slice(2, 11)}`, m = d(!1), x = d(null);
54
+ window.minimizedCount || (window.minimizedCount = 0);
55
+ const { x: N, y: E } = ke(x, {
56
+ initialValue: {
57
+ x: 5,
58
+ y: window.innerHeight - 100 - (window.minimizedCount || 0) * 60
59
+ },
60
+ onMove(o) {
61
+ var e;
62
+ (e = x.value) == null || e.classList.add("dragging"), document.body.classList.add("qy-dialog--dragging"), N.value = Math.max(
63
+ 0,
64
+ Math.min(window.innerWidth - 300, o.x)
65
+ ), E.value = Math.max(
66
+ 0,
67
+ Math.min(window.innerHeight - 50, o.y)
68
+ );
69
+ },
70
+ onEnd() {
71
+ var o;
72
+ (o = x.value) == null || o.classList.remove("dragging"), document.body.classList.remove("qy-dialog--dragging");
73
+ }
74
+ }), le = C(() => ({
75
+ transform: `translate(${N.value}px, ${E.value}px)`,
76
+ willChange: "transform"
77
+ }));
78
+ function F(o) {
79
+ const e = o.target, { scrollTop: r, scrollHeight: f, clientHeight: b } = e;
80
+ L.value = r <= Q, M.value = f - (r + b) <= Q;
81
+ }
82
+ function ne() {
83
+ document.querySelector(`.${c}.el-dialog`).addEventListener("scroll", F), _(), p("opened");
84
+ }
85
+ function T() {
86
+ g.value = !g.value, _();
87
+ }
88
+ function y() {
89
+ I.value || (I.value = !0, m.value = !1, B.value = !1, p("cancel"), p("close"));
90
+ }
91
+ function ie(o) {
92
+ l.showFullscreen && o.detail >= 2 && T();
93
+ }
94
+ function P() {
95
+ return Y(
96
+ K,
97
+ {
98
+ ...s(l.confirmProps),
99
+ type: "primary",
100
+ class: "dialog__footerBtn",
101
+ onClick: () => {
102
+ p("confirm"), p("ok");
103
+ }
104
+ },
105
+ () => s(l.confirmProps).title || "确 认"
106
+ );
107
+ }
108
+ function R() {
109
+ return Y(
110
+ K,
111
+ { class: "dialog__footerBtn", onClick: () => y() },
112
+ () => "取 消"
113
+ );
114
+ }
115
+ fe(() => {
116
+ typeof window.qyDialogMaxZIndex > "u" && (window.qyDialogMaxZIndex = A), _();
117
+ });
118
+ function _() {
119
+ var X;
120
+ const o = Array.from(
121
+ document.querySelectorAll(".el-overlay")
122
+ ).filter((z) => window.getComputedStyle(z).display !== "none" && !z.classList.contains("is-message")), e = (X = document.querySelector(`.${c}`)) == null ? void 0 : X.closest(".el-overlay"), r = document.querySelector(
123
+ `.${c}.el-dialog`
124
+ );
125
+ if (!e || !r) return;
126
+ const f = A;
127
+ window.qyDialogMaxZIndex = window.qyDialogMaxZIndex || f;
128
+ const k = Math.max(
129
+ window.qyDialogMaxZIndex,
130
+ ...o.map(
131
+ (z) => parseInt(window.getComputedStyle(z).zIndex || f.toString())
132
+ )
133
+ ) + 2;
134
+ window.qyDialogMaxZIndex = k, ge(() => {
135
+ e.style.zIndex = k.toString(), r.style.zIndex = (k + 1).toString(), O.value = k + 1;
136
+ });
137
+ }
138
+ pe(() => {
139
+ const o = document.querySelector(
140
+ `.${c} .qy-dialog__wrapper-container`
141
+ );
142
+ o && o.removeEventListener("scroll", F), m.value && window.minimizedCount--;
143
+ });
144
+ function U() {
145
+ var e;
146
+ m.value = !m.value;
147
+ const o = (e = document.querySelector(`.${c}`)) == null ? void 0 : e.closest(".el-overlay");
148
+ m.value ? (o.style.display = "none", window.minimizedCount++, E.value = window.innerHeight - 50 - (window.minimizedCount || 0) * 60) : (o.style.display = "block", window.minimizedCount--, _());
149
+ }
150
+ return (o, e) => {
151
+ const r = ye("Close"), f = se, b = ae;
152
+ return n(), i("div", null, [
153
+ v(b, we({
154
+ ref: "dialogRef",
155
+ class: ["qy-dialog", [
156
+ l.size === "small" && "[&_.el-dialog__header]:!hidden",
157
+ c
158
+ ]],
159
+ "model-value": B.value,
160
+ "align-center": "",
161
+ "append-to-body": "",
162
+ style: {
163
+ "--el-dialog-padding-primary": 0
164
+ },
165
+ "show-close": !1,
166
+ fullscreen: g.value,
167
+ "z-index": O.value,
168
+ onClosed: y,
169
+ onOpened: ne,
170
+ draggable: ""
171
+ }, s(D)), he({
172
+ header: w(() => [
173
+ l.size === "default" ? (n(), i("div", {
174
+ key: 0,
175
+ style: $({
176
+ borderBottom: "1px solid",
177
+ borderColor: L.value ? "transparent" : "var(--block-outline-color)",
178
+ transition: "border-color .2s linear"
179
+ }),
180
+ class: "flex justify-between h-[var(--header-height)]",
181
+ onDblclick: ie
182
+ }, [
183
+ t("div", ze, [
184
+ s(q).header ? s(q).header ? (n(), i("div", qe, [
185
+ h(o.$slots, "header")
186
+ ])) : u("", !0) : (n(), i("span", Ce, G(s(D).title), 1))
187
+ ]),
188
+ t("div", {
189
+ class: "flex",
190
+ onMousedown: e[3] || (e[3] = a(() => {
191
+ }, ["stop"]))
192
+ }, [
193
+ l.size === "default" ? (n(), i("div", {
194
+ key: 0,
195
+ class: "qy-dialog__btn qy-dialog__btn--default",
196
+ onClick: a(U, ["stop"]),
197
+ onMousedown: e[0] || (e[0] = a(() => {
198
+ }, ["stop"]))
199
+ }, e[4] || (e[4] = [
200
+ t("span", {
201
+ class: "icon-[material-symbols--minimize] text-xl mb-3",
202
+ role: "img",
203
+ "aria-hidden": "true"
204
+ }, null, -1)
205
+ ]), 32)) : u("", !0),
206
+ l.showFullscreen ? (n(), i("div", {
207
+ key: 1,
208
+ class: "qy-dialog__btn qy-dialog__btn--default",
209
+ onClick: a(T, ["stop"]),
210
+ onMousedown: e[1] || (e[1] = a(() => {
211
+ }, ["stop"]))
212
+ }, [
213
+ g.value ? (n(), i("span", Se)) : (n(), i("span", Me))
214
+ ], 32)) : u("", !0),
215
+ t("div", {
216
+ class: "qy-dialog__btn qy-dialog__btn--danger",
217
+ onClick: a(y, ["stop"]),
218
+ onMousedown: e[2] || (e[2] = a(() => {
219
+ }, ["stop"]))
220
+ }, e[5] || (e[5] = [
221
+ t("span", {
222
+ class: "icon-[ri--close-line] text-xl",
223
+ role: "img",
224
+ "aria-hidden": "true"
225
+ }, null, -1)
226
+ ]), 32)
227
+ ], 32)
228
+ ], 36)) : u("", !0)
229
+ ]),
230
+ default: w(() => [
231
+ t("div", {
232
+ class: Z(["qy-dialog__wrapper", s(_e)(g.value && "qy-dialog__wrapper--fullscreen")]),
233
+ style: $({
234
+ maxHeight: j.value ? "calc(100vh - var(--header-height) - var(--footer-height) - var(--sides-gap))" : "calc(100vh - var(--header-height) - var(--sides-gap))",
235
+ padding: l.size === "small" ? "var(--small-content-padding)" : "var(--content-padding)"
236
+ })
237
+ }, [
238
+ l.size === "small" ? (n(), i("div", Ie, [
239
+ v(f, {
240
+ size: 36,
241
+ class: "cursor-pointer text-gray-100 active:scale-75 rounded-sm transition-all",
242
+ onClick: y
243
+ }, {
244
+ default: w(() => [
245
+ v(r)
246
+ ]),
247
+ _: 1
248
+ })
249
+ ])) : u("", !0),
250
+ h(o.$slots, "default")
251
+ ], 6)
252
+ ]),
253
+ _: 2
254
+ }, [
255
+ !o.$slots.footer && Array.isArray(S.value) ? {
256
+ name: "footer",
257
+ fn: w(() => [
258
+ t("div", Be, [
259
+ t("div", null, [
260
+ h(o.$slots, "footer-left")
261
+ ]),
262
+ t("div", {
263
+ class: Z([{
264
+ "qy-dialog__footer--outline": M.value
265
+ }, "qy-dialog__footer flex items-center justify-end"])
266
+ }, [
267
+ S.value.includes("cancel") ? (n(), J(R, { key: 0 })) : u("", !0),
268
+ S.value.includes("confirm") ? (n(), J(P, { key: 1 })) : u("", !0),
269
+ h(o.$slots, "footer-append")
270
+ ], 2)
271
+ ])
272
+ ]),
273
+ key: "0"
274
+ } : j.value ? {
275
+ name: "footer",
276
+ fn: w(() => [
277
+ t("div", {
278
+ class: Z([{
279
+ "qy-dialog__footer--outline": M.value
280
+ }, "qy-dialog__footer px-[var(--content-padding)] min-h-[var(--footer-height)] flex items-center justify-end"])
281
+ }, [
282
+ h(o.$slots, "footer", {
283
+ layouts: V.value,
284
+ layoutsNode: Object.values(V.value)
285
+ })
286
+ ], 2)
287
+ ]),
288
+ key: "1"
289
+ } : void 0
290
+ ]), 1040, ["class", "model-value", "fullscreen", "z-index"]),
291
+ ve(t("div", {
292
+ ref_key: "minimizedRef",
293
+ ref: x,
294
+ class: "fixed left-0 top-0 bg-white rounded shadow-lg cursor-pointer z-[9999] hover:bg-gray-50",
295
+ style: $([le.value, { width: "300px", height: "50px", "will-change": "transform" }])
296
+ }, [
297
+ t("div", De, [
298
+ t("div", Ee, [
299
+ e[6] || (e[6] = t("div", { class: "icon-[mdi--window-restore] text-gray-600" }, null, -1)),
300
+ t("span", $e, G(s(D).title), 1)
301
+ ]),
302
+ t("div", Ze, [
303
+ t("div", {
304
+ class: "p-1 hover:bg-gray-200 rounded",
305
+ onClick: a(U, ["stop"])
306
+ }, e[7] || (e[7] = [
307
+ t("div", { class: "icon-[mdi--window-maximize] text-gray-600" }, null, -1)
308
+ ])),
309
+ t("div", {
310
+ class: "p-1 hover:bg-red-100 rounded",
311
+ onClick: a(y, ["stop"])
312
+ }, e[8] || (e[8] = [
313
+ t("div", { class: "icon-[mdi--close] text-red-600" }, null, -1)
314
+ ]))
315
+ ])
316
+ ])
317
+ ], 4), [
318
+ [xe, m.value]
319
+ ])
320
+ ]);
321
+ };
322
+ }
323
+ });
324
+ export {
325
+ Te as default
326
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});;/* empty css */const y=require("./upload/index.vue.cjs"),s=require("./dialog/index.vue.cjs"),d=require("./remark-image/index.vue.cjs"),m=require("./qy-input/index.vue.cjs"),I=require("./qy-search-input/index.vue.cjs"),S=require("./qy-record-quote-search/index.vue.cjs"),h=require("./qy-select/index.vue.cjs"),f=require("./qy-form-section/index.vue.cjs"),q=require("./qy-action-bar/index.vue.cjs"),t=require("./utils/install.cjs"),n=t.withInstall(y.default,"QyUpload"),o=t.withInstall(s.default,"QyDialog"),c=t.withInstall(d.default,"QyRemarkImage"),r=t.withInstall(m.default,"QyInput"),l=t.withInstall(I.default,"QySearchInput"),i=t.withInstall(S.default,"QyRecordQuoteSearch"),a=t.withInstall(h.default,"QySelect"),Q=t.withInstall(f.default,"QyFormSection"),u=t.withInstall(q.default,"QyActionBar"),g=e=>{e.component("QyDialog",o),e.component("QyUpload",n),e.component("QyRemarkImage",c),e.component("QyInput",r),e.component("QySearchInput",l),e.component("QyRecordQuoteSearch",i),e.component("QySelect",a),e.component("QyFormSection",Q),e.component("QyActionBar",u)},x={install:g,QyUpload:n,QyDialog:o,QyInput:r,QySearchInput:l,QyRecordQuoteSearch:i,QySelect:a,QyFormSection:Q,QyActionBar:u,QyRemarkImage:c};exports.QyActionBar=u;exports.QyDialog=o;exports.QyFormSection=Q;exports.QyInput=r;exports.QyRecordQuoteSearch=i;exports.QyRemarkImage=c;exports.QySearchInput=l;exports.QySelect=a;exports.QyUpload=n;exports.default=x;
@@ -0,0 +1,40 @@
1
+ /* empty css */
2
+ import s from "./upload/index.vue.mjs";
3
+ import p from "./dialog/index.vue.mjs";
4
+ import l from "./remark-image/index.vue.mjs";
5
+ import S from "./qy-input/index.vue.mjs";
6
+ import f from "./qy-search-input/index.vue.mjs";
7
+ import u from "./qy-record-quote-search/index.vue.mjs";
8
+ import I from "./qy-select/index.vue.mjs";
9
+ import d from "./qy-form-section/index.vue.mjs";
10
+ import h from "./qy-action-bar/index.vue.mjs";
11
+ import { withInstall as t } from "./utils/install.mjs";
12
+ const n = t(s, "QyUpload"), c = t(p, "QyDialog"), e = t(l, "QyRemarkImage"), r = t(S, "QyInput"), m = t(f, "QySearchInput"), Q = t(
13
+ u,
14
+ "QyRecordQuoteSearch"
15
+ ), y = t(I, "QySelect"), i = t(d, "QyFormSection"), a = t(h, "QyActionBar"), R = (o) => {
16
+ o.component("QyDialog", c), o.component("QyUpload", n), o.component("QyRemarkImage", e), o.component("QyInput", r), o.component("QySearchInput", m), o.component("QyRecordQuoteSearch", Q), o.component("QySelect", y), o.component("QyFormSection", i), o.component("QyActionBar", a);
17
+ }, b = {
18
+ install: R,
19
+ QyUpload: n,
20
+ QyDialog: c,
21
+ QyInput: r,
22
+ QySearchInput: m,
23
+ QyRecordQuoteSearch: Q,
24
+ QySelect: y,
25
+ QyFormSection: i,
26
+ QyActionBar: a,
27
+ QyRemarkImage: e
28
+ };
29
+ export {
30
+ a as QyActionBar,
31
+ c as QyDialog,
32
+ i as QyFormSection,
33
+ r as QyInput,
34
+ Q as QyRecordQuoteSearch,
35
+ e as QyRemarkImage,
36
+ m as QySearchInput,
37
+ y as QySelect,
38
+ n as QyUpload,
39
+ b as default
40
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");;/* empty css */const s=require("../../_virtual/plugin-vue_export-helper.cjs"),l={key:0,class:"qy-action-bar__left"},n={key:1,class:"qy-action-bar__center"},d={key:2,class:"qy-action-bar__right"},i=e.defineComponent({name:"QyActionBar",__name:"index",props:{sticky:{type:Boolean,default:!0},offsetBottom:{default:0},bordered:{type:Boolean,default:!0},shadow:{type:Boolean,default:!1},wrap:{type:Boolean,default:!0},justify:{default:"between"},background:{default:"#fff"}},setup(r){const o=r,a=e.computed(()=>({bottom:`${o.offsetBottom}px`,background:o.background}));return(t,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["qy-action-bar",[`is-justify-${t.justify}`,{"is-sticky":t.sticky,"is-bordered":t.bordered,"is-shadow":t.shadow,"is-wrap":t.wrap}]]),style:e.normalizeStyle(a.value)},[t.$slots.left?(e.openBlock(),e.createElementBlock("div",l,[e.renderSlot(t.$slots,"left",{},void 0,!0)])):e.createCommentVNode("",!0),t.$slots.default?(e.openBlock(),e.createElementBlock("div",n,[e.renderSlot(t.$slots,"default",{},void 0,!0)])):e.createCommentVNode("",!0),t.$slots.right?(e.openBlock(),e.createElementBlock("div",d,[e.renderSlot(t.$slots,"right",{},void 0,!0)])):e.createCommentVNode("",!0)],6))}}),u=s.default(i,[["__scopeId","data-v-86002d5a"]]);exports.default=u;