zkqh-lagrange-utils 0.0.51 → 0.0.53

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.
@@ -1,9 +1,9 @@
1
1
  @font-face {
2
2
  font-family: "lc"; /* Project id 5090041 */
3
3
  src:
4
- url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
5
- url('//at.alicdn.com/t/c/font_5090041_7vyab94ct17.woff?t=1782208826104') format('woff'),
6
- url('//at.alicdn.com/t/c/font_5090041_7vyab94ct17.ttf?t=1782208826104') format('truetype');
4
+ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
5
+ url('//at.alicdn.com/t/c/font_5090041_bogv5r3zpe.woff?t=1784458915849') format('woff'),
6
+ url('//at.alicdn.com/t/c/font_5090041_bogv5r3zpe.ttf?t=1784458915849') format('truetype');
7
7
  }
8
8
 
9
9
  .lc {
@@ -14,6 +14,142 @@
14
14
  -moz-osx-font-smoothing: grayscale;
15
15
  }
16
16
 
17
+ .lc-wenjiandaochu:before {
18
+ content: "\e6af";
19
+ }
20
+
21
+ .lc-Warning:before {
22
+ content: "\e68f";
23
+ }
24
+
25
+ .lc-tuxing1:before {
26
+ content: "\e691";
27
+ }
28
+
29
+ .lc-lock:before {
30
+ content: "\e7fb";
31
+ }
32
+
33
+ .lc-gold-outlined:before {
34
+ content: "\e821";
35
+ }
36
+
37
+ .lc-a-bianzu231:before {
38
+ content: "\e71a";
39
+ }
40
+
41
+ .lc-a-bianzu191:before {
42
+ content: "\e70f";
43
+ }
44
+
45
+ .lc-a-bianzu221:before {
46
+ content: "\e711";
47
+ }
48
+
49
+ .lc-bianzu5:before {
50
+ content: "\e712";
51
+ }
52
+
53
+ .lc-linechart-outlined:before {
54
+ content: "\e710";
55
+ }
56
+
57
+ .lc-calendar-filled:before {
58
+ content: "\e717";
59
+ }
60
+
61
+ .lc-a-bianzu16:before {
62
+ content: "\e71b";
63
+ }
64
+
65
+ .lc-a-bianzu14:before {
66
+ content: "\e715";
67
+ }
68
+
69
+ .lc-a-bianzu15:before {
70
+ content: "\e718";
71
+ }
72
+
73
+ .lc-ungroup-outlined:before {
74
+ content: "\e720";
75
+ }
76
+
77
+ .lc-pound-outlined:before {
78
+ content: "\e723";
79
+ }
80
+
81
+ .lc-a-bianzu7:before {
82
+ content: "\e6f9";
83
+ }
84
+
85
+ .lc-haishangshengyazhan:before {
86
+ content: "\e75e";
87
+ }
88
+
89
+ .lc-fengchangleixing:before {
90
+ content: "\e682";
91
+ }
92
+
93
+ .lc-lvzhou_yunwei:before {
94
+ content: "\e629";
95
+ }
96
+
97
+ .lc-fabu:before {
98
+ content: "\e65d";
99
+ }
100
+
101
+ .lc-zonghefenxi:before {
102
+ content: "\e690";
103
+ }
104
+
105
+ .lc-shuju:before {
106
+ content: "\e70c";
107
+ }
108
+
109
+ .lc-rengongzhinengdanao:before {
110
+ content: "\e612";
111
+ }
112
+
113
+ .lc-fengchang1:before {
114
+ content: "\e601";
115
+ }
116
+
117
+ .lc-app:before {
118
+ content: "\e603";
119
+ }
120
+
121
+ .lc-a-3d:before {
122
+ content: "\e67b";
123
+ }
124
+
125
+ .lc-lishiguzhang:before {
126
+ content: "\e7ad";
127
+ }
128
+
129
+ .lc-fenxi:before {
130
+ content: "\e672";
131
+ }
132
+
133
+ .lc-a-PLCinformationmanagement:before {
134
+ content: "\e63e";
135
+ }
136
+
137
+ .lc-modbuskongzhiqi:before {
138
+ content: "\e684";
139
+ }
140
+
141
+ .lc-beikongshuiwupingtaimenhu-tubiao_zhinengwangguan:before {
142
+ content: "\e62e";
143
+ }
144
+
145
+ .lc-zhukong:before {
146
+ content: "\e6e9";
147
+ }
148
+
149
+ .lc-a-bianzu21:before {
150
+ content: "\e732";
151
+ }
152
+
17
153
  .lc-yingyongshangcheng:before {
18
154
  content: "\e675";
19
155
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zkqh-lagrange-utils",
3
3
  "private": false,
4
- "version": "0.0.51",
4
+ "version": "0.0.53",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -18,6 +18,14 @@
18
18
  "import": "./dist/lagrange-utils.js",
19
19
  "require": "./dist/lagrange-utils.umd.cjs"
20
20
  },
21
+ "./export_plugin": {
22
+ "import": "./src/service/export_plugin/index.js",
23
+ "default": "./src/service/export_plugin/index.js"
24
+ },
25
+ "./export_plugin/api": {
26
+ "import": "./src/service/export_plugin/api/index.js",
27
+ "default": "./src/service/export_plugin/api/index.js"
28
+ },
21
29
  "./style.css": {
22
30
  "default": "./dist/style.css"
23
31
  },
@@ -34,13 +42,24 @@
34
42
  "files": [
35
43
  "dist",
36
44
  "assets",
45
+ "src/service",
37
46
  "postcss.config.js",
38
47
  "postcss.config.cjs"
39
48
  ],
40
49
  "dependencies": {
41
- "vue": "^3.5.24",
42
50
  "autoprefixer": "^10.4.22",
43
- "postcss-pxtorem": "^6.1.0"
51
+ "axios": "^1.18.1",
52
+ "postcss-pxtorem": "^6.1.0",
53
+ "vue": "^3.3.0"
54
+ },
55
+ "peerDependencies": {
56
+ "naive-ui": "^2.40.0",
57
+ "vue": "^3.3.0"
58
+ },
59
+ "peerDependenciesMeta": {
60
+ "naive-ui": {
61
+ "optional": true
62
+ }
44
63
  },
45
64
  "devDependencies": {
46
65
  "@vitejs/plugin-vue": "^5.0.4",
@@ -0,0 +1,205 @@
1
+ import { defineComponent, ref, computed, toRefs, onMounted } from "vue"
2
+ import { PluginDirSelect } from "./internal/plugin-dir-select.jsx"
3
+ import { usePluginHealth } from "./hooks/use-plugin-health.js"
4
+ import { isOverSizeLimit, isPreviewOverflowDisk } from "./utils/size.js"
5
+ import "./internal/styles/plugin-local-export.less"
6
+ import("./assets/font/iconfont-lc.css")
7
+
8
+ const DEFAULT_PREVIEW = {
9
+ show: false,
10
+ totalSize: 0,
11
+ exportDisabled: false,
12
+ }
13
+
14
+ /**
15
+ * 本地导出组合区:平台/应用小文件导出 + 插件目录导出 + 50MB 分流
16
+ *
17
+ * @example
18
+ * <PluginLocalExport
19
+ * previewInfo={{ show, totalSize, exportDisabled }}
20
+ * downloadUrl={url}
21
+ * onSuccess={({ mode, dirname }) => {}}
22
+ * />
23
+ */
24
+ export const PluginLocalExport = defineComponent({
25
+ name: "PluginLocalExport",
26
+ props: {
27
+ /**
28
+ * 预览与分流控制
29
+ * @type {{ show?: boolean, totalSize?: number, exportDisabled?: boolean }}
30
+ */
31
+ previewInfo: {
32
+ type: Object,
33
+ default: () => ({ ...DEFAULT_PREVIEW }),
34
+ },
35
+ /** 插件安装包下载地址 */
36
+ downloadUrl: { type: String, default: "" },
37
+ },
38
+ emits: ["success"],
39
+ setup(props, { emit }) {
40
+ const { previewInfo, downloadUrl } = toRefs(props)
41
+ const dirname = ref("")
42
+ const diskInfo = ref({ total_size: 0, used_size: 0 })
43
+
44
+ const health = usePluginHealth({
45
+ downloadUrl: () => downloadUrl.value,
46
+ })
47
+ const { pluginReady, checkHealth, triggerInstall } = health
48
+
49
+ onMounted(() => {
50
+ checkHealth()
51
+ })
52
+
53
+ const preview = computed(() => ({
54
+ ...DEFAULT_PREVIEW,
55
+ ...(previewInfo.value || {}),
56
+ }))
57
+
58
+ /**
59
+ * 是否展示平台/应用导出区(≤50MB)
60
+ * show=true 且未禁用且有大小且未超 50MB
61
+ */
62
+ const usePlatformExport = computed(() => {
63
+ const info = preview.value
64
+ if (!info.show || info.exportDisabled) return false
65
+ const size = Number(info.totalSize) || 0
66
+ if (size <= 0) return false
67
+ return !isOverSizeLimit(size)
68
+ })
69
+
70
+ /**
71
+ * 是否展示插件导出区
72
+ * - show=false:始终插件
73
+ * - show=true:已可导出且 >50MB
74
+ */
75
+ const usePluginExport = computed(() => {
76
+ const info = preview.value
77
+ if (!info.show) return true
78
+ if (info.exportDisabled) return false
79
+ const size = Number(info.totalSize) || 0
80
+ if (size <= 0) return false
81
+ return isOverSizeLimit(size)
82
+ })
83
+
84
+ /** 插件路径:预览大小是否超出当前目录剩余空间 */
85
+ const diskOverflow = computed(() => {
86
+ if (!pluginReady.value || !usePluginExport.value) return false
87
+ const info = preview.value
88
+ if (!info.show) return false
89
+ return isPreviewOverflowDisk(info.totalSize, diskInfo.value)
90
+ })
91
+
92
+ const pluginExportDisabled = computed(() => {
93
+ if (!pluginReady.value) return true
94
+ if (!dirname.value) return true
95
+ if (diskOverflow.value) return true
96
+ return false
97
+ })
98
+
99
+ const pluginButtonTitle = computed(() => {
100
+ if (!pluginReady.value) return "请先安装并启动导出插件"
101
+ if (!dirname.value) return "请选择本地导出目录"
102
+ if (diskOverflow.value) return "预估大小超出本地目录剩余空间,无法导出"
103
+ return ""
104
+ })
105
+
106
+ const onDiskInfoUpdate = (info) => {
107
+ diskInfo.value = info || { total_size: 0, used_size: 0 }
108
+ }
109
+
110
+ const onInstall = () => {
111
+ triggerInstall()
112
+ }
113
+
114
+ /** 平台/应用路径:确认后回调 */
115
+ const onPlatformExportClick = () => {
116
+ window.$dialog?.warning?.({
117
+ title: "确认导出",
118
+ content: "确认按当前筛选条件通过平台打包下载?",
119
+ positiveText: "确认",
120
+ negativeText: "取消",
121
+ onPositiveClick: () => {
122
+ emit("success", { mode: "platform" })
123
+ },
124
+ })
125
+ }
126
+
127
+ /** 插件路径:校验后回调(含 dirname) */
128
+ const onPluginExportClick = () => {
129
+ if (pluginExportDisabled.value) return
130
+ emit("success", { mode: "plugin", dirname: dirname.value })
131
+ }
132
+
133
+ return () => {
134
+ const showPlatform = usePlatformExport.value
135
+ const showPlugin = usePluginExport.value
136
+
137
+ if (!showPlatform && !showPlugin) {
138
+ return null
139
+ }
140
+
141
+ return (
142
+ <div class="plugin_local_export">
143
+ {showPlatform ? (
144
+ <div class="_ple_platform">
145
+ <span class="__tip lc-fs-m">文件小于50MB,请直接导出!</span>
146
+ <span
147
+ class="__action lc_btn_primary lc_btn_m"
148
+ onClick={onPlatformExportClick}>
149
+ 导&nbsp;&nbsp;出
150
+ </span>
151
+ </div>
152
+ ) : null}
153
+
154
+ {showPlugin ? (
155
+ <>
156
+ <div class="_ple_label lc-fs-m">选择本地目录</div>
157
+ {pluginReady.value && diskOverflow.value ? (
158
+ <div class="_ple_warn lc-fs-s">
159
+ <i class="lc lc-warning-circle-outlined"></i>
160
+ <span>预估大小超出本地目录剩余空间,请更换目录或缩小导出范围</span>
161
+ </div>
162
+ ) : null}
163
+
164
+ {!pluginReady.value ? (
165
+ <div class="_ple_row">
166
+ <n-tree-select
167
+ size="small"
168
+ disabled
169
+ placeholder="安装插件后可选择导出文件"
170
+ options={[]}
171
+ />
172
+ <span
173
+ class="lc_btn_primary lc_btn_m _ple_install"
174
+ onClick={onInstall}>
175
+ 立即安装插件
176
+ </span>
177
+ </div>
178
+ ) : (
179
+ <div class="_ple_row">
180
+ <PluginDirSelect
181
+ modelValue={dirname.value}
182
+ onUpdate:modelValue={(v) => {
183
+ dirname.value = v
184
+ }}
185
+ onUpdate:diskInfo={onDiskInfoUpdate}
186
+ />
187
+ <div class="_ple_action">
188
+ <span
189
+ class={["lc_btn_primary", "lc_btn_m", pluginExportDisabled.value ? "_disabled" : ""]}
190
+ title={pluginButtonTitle.value}
191
+ onClick={onPluginExportClick}>
192
+ 导&nbsp;&nbsp;出
193
+ </span>
194
+ </div>
195
+ </div>
196
+ )}
197
+ </>
198
+ ) : null}
199
+ </div>
200
+ )
201
+ }
202
+ },
203
+ })
204
+
205
+ export default PluginLocalExport
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 导出插件 API 独立入口(可不挂载 UI)
3
+ * @example
4
+ * import { pluginApi } from "zkqh-lagrange-utils/export_plugin/api"
5
+ */
6
+ export { pluginApi } from "./plugin.js"
@@ -0,0 +1,154 @@
1
+ /** 与 front_plugins/lagrange-export-bridge 内容脚本约定的消息源(内置,不对外) */
2
+ export const PLUGIN_BRIDGE_SOURCE = "lagrange-export-bridge"
3
+
4
+ const REQUEST = "LAGRANGE_EXPORT_BRIDGE_REQUEST"
5
+ const RESPONSE = "LAGRANGE_EXPORT_BRIDGE_RESPONSE"
6
+ const READY = "LAGRANGE_EXPORT_BRIDGE_READY"
7
+ const PING = "LAGRANGE_EXPORT_BRIDGE_PING"
8
+
9
+ const BRIDGE_WAIT_MS = 1200
10
+ const BRIDGE_TIMEOUT_MS = 15000
11
+
12
+ const debugEnabled = () =>
13
+ typeof localStorage !== "undefined" && localStorage.getItem("LAGRANGE_PLUGIN_BRIDGE_DEBUG") === "1"
14
+
15
+ /** @param {...unknown} args */
16
+ function bridgeLog(...args) {
17
+ if (debugEnabled()) {
18
+ console.log("[plugin-bridge]", ...args)
19
+ }
20
+ }
21
+
22
+ let bridgeReady = false
23
+ let listenerAttached = false
24
+
25
+ /** 内容脚本注入后写入,避免 READY 早于业务脚本 */
26
+ function isBridgeDomMarked() {
27
+ return typeof document !== "undefined" && document.documentElement?.dataset?.lagrangeExportBridge === "1"
28
+ }
29
+
30
+ function markBridgeReady(reason) {
31
+ if (!bridgeReady) {
32
+ bridgeReady = true
33
+ bridgeLog("ready", reason)
34
+ }
35
+ }
36
+
37
+ function attachBridgeListener() {
38
+ if (listenerAttached || typeof window === "undefined") return
39
+ listenerAttached = true
40
+ window.addEventListener("message", (event) => {
41
+ if (event.origin !== window.location.origin) return
42
+ const data = event.data
43
+ if (data?.source !== PLUGIN_BRIDGE_SOURCE || data?.type !== READY) return
44
+ markBridgeReady("message")
45
+ })
46
+ }
47
+
48
+ attachBridgeListener()
49
+
50
+ /**
51
+ * 扩展桥接是否可用
52
+ * @returns {boolean}
53
+ */
54
+ export function isPluginBridgeReady() {
55
+ return bridgeReady || isBridgeDomMarked()
56
+ }
57
+
58
+ /**
59
+ * 等待扩展 content script 就绪
60
+ * @returns {Promise<boolean>}
61
+ */
62
+ export function waitForPluginBridge() {
63
+ if (isPluginBridgeReady()) {
64
+ return Promise.resolve(true)
65
+ }
66
+ attachBridgeListener()
67
+ window.postMessage(
68
+ { source: PLUGIN_BRIDGE_SOURCE, type: PING },
69
+ window.location.origin,
70
+ )
71
+ bridgeLog("ping sent", window.location.origin)
72
+ return new Promise((resolve) => {
73
+ const deadline = Date.now() + BRIDGE_WAIT_MS
74
+ const tick = () => {
75
+ if (isBridgeDomMarked()) {
76
+ markBridgeReady("dom-dataset")
77
+ }
78
+ if (isPluginBridgeReady()) {
79
+ resolve(true)
80
+ return
81
+ }
82
+ if (Date.now() >= deadline) {
83
+ bridgeLog("wait timeout, bridge not detected")
84
+ resolve(false)
85
+ return
86
+ }
87
+ requestAnimationFrame(tick)
88
+ }
89
+ tick()
90
+ })
91
+ }
92
+
93
+ function createBridgeRequestId() {
94
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
95
+ try {
96
+ return crypto.randomUUID()
97
+ } catch {
98
+ // HTTP 非安全上下文下 randomUUID 不可用
99
+ }
100
+ }
101
+ return `ep-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`
102
+ }
103
+
104
+ /**
105
+ * 经 Chrome 扩展访问本机插件 API
106
+ * @param {string} method
107
+ * @param {string} path 如 /health
108
+ * @param {object} [body]
109
+ * @returns {Promise<object>}
110
+ */
111
+ export function pluginFetchViaBridge(method, path, body) {
112
+ bridgeLog("request", method, path)
113
+ return new Promise((resolve, reject) => {
114
+ const id = createBridgeRequestId()
115
+
116
+ const timer = setTimeout(() => {
117
+ window.removeEventListener("message", onMessage)
118
+ reject(new Error("扩展桥接请求超时"))
119
+ }, BRIDGE_TIMEOUT_MS)
120
+
121
+ const onMessage = (event) => {
122
+ if (event.origin !== window.location.origin) return
123
+ const data = event.data
124
+ if (data?.source !== PLUGIN_BRIDGE_SOURCE || data?.type !== RESPONSE || data.id !== id) {
125
+ return
126
+ }
127
+ clearTimeout(timer)
128
+ window.removeEventListener("message", onMessage)
129
+
130
+ if (data.error) {
131
+ reject(new Error(data.error))
132
+ return
133
+ }
134
+ if (data.data == null && data.ok === false) {
135
+ reject(new Error("扩展桥接失败"))
136
+ return
137
+ }
138
+ resolve(data.data)
139
+ }
140
+
141
+ window.addEventListener("message", onMessage)
142
+ window.postMessage(
143
+ {
144
+ source: PLUGIN_BRIDGE_SOURCE,
145
+ type: REQUEST,
146
+ id,
147
+ method,
148
+ path,
149
+ body,
150
+ },
151
+ window.location.origin,
152
+ )
153
+ })
154
+ }