af-mobile-client-vue3 1.4.63 → 1.4.64

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 (29) hide show
  1. package/certs/127.0.0.1+2-key.pem +28 -0
  2. package/certs/127.0.0.1+2.pem +27 -0
  3. package/mock/modules/prose.mock.ts.timestamp-1758877157774.mjs +53 -0
  4. package/mock/modules/user.mock.ts.timestamp-1758877157774.mjs +97 -0
  5. package/package.json +120 -120
  6. package/src/api/user/index.ts +45 -45
  7. package/src/components/common/otherCharge/ChargePrintSelectorAndRemarks.vue +137 -137
  8. package/src/components/common/otherCharge/CodePayment.vue +357 -357
  9. package/src/components/common/otherCharge/FileUploader.vue +602 -602
  10. package/src/components/common/otherCharge/GridFileUploader.vue +846 -846
  11. package/src/components/common/otherCharge/PaymentMethodSelector.vue +202 -202
  12. package/src/components/common/otherCharge/PaymentMethodSelectorCard.vue +45 -45
  13. package/src/components/common/otherCharge/ReceiptModal.vue +273 -273
  14. package/src/components/common/otherCharge/index.ts +43 -43
  15. package/src/components/core/ImageUploader/index.vue +510 -510
  16. package/src/components/data/OtherCharge/OtherChargeItemModal.vue +547 -547
  17. package/src/router/guards.ts +131 -131
  18. package/src/services/api/Login.ts +6 -6
  19. package/src/services/v3Api.ts +170 -170
  20. package/src/types/platform.ts +194 -194
  21. package/src/utils/platform-auth.ts +150 -150
  22. package/src/utils/queryFormDefaultRangePicker.ts +57 -57
  23. package/src/views/component/XCellListView/index.vue +107 -138
  24. package/src/views/component/XFormGroupView/index.vue +78 -82
  25. package/src/views/component/XFormView/index.vue +41 -46
  26. package/src/views/external/index.vue +158 -158
  27. package/src/views/loading/AuthLoading.vue +395 -395
  28. package/src/views/user/register/index.vue +958 -958
  29. package/vite.config.ts +122 -122
@@ -1,150 +1,150 @@
1
- /**
2
- * 统一平台认证工具类
3
- * 合并了 wechatUtil.ts, wechat.ts 和 auth-platform.ts 的功能
4
- */
5
-
6
- import type { RouteLocationNormalized } from 'vue-router'
7
- import { PLATFORM_ROUTE_MAP, PlatformType } from '@af-mobile-client-vue3/types/platform'
8
- import { detectEnvironment } from '@af-mobile-client-vue3/utils/environment'
9
- /**
10
- * 认证参数接口
11
- */
12
- export interface AuthParams {
13
- /** 授权码 */
14
- code?: string
15
- /** 状态参数 */
16
- state?: string
17
- /** 租户名称 */
18
- tenantName?: string
19
- /** 平台类型 */
20
- platformType?: PlatformType
21
- /** 错误信息 */
22
- error?: string
23
- /** 错误描述 */
24
- error_description?: string
25
- }
26
-
27
- /**
28
- * 微信回调参数接口(向后兼容)
29
- */
30
- export interface WechatCallbackParams extends AuthParams { }
31
-
32
- /**
33
- * 外部用户检测结果接口
34
- */
35
- export interface ExternalUserResult {
36
- /** 是否为外部用户 */
37
- isExternal: boolean
38
- /** 认证参数(仅当 isExternal 为 true 且有授权参数时存在) */
39
- authParams?: {
40
- code?: string
41
- state?: string
42
- tenantName?: string
43
- platformType?: string
44
- platformUserId?: string
45
- }
46
- }
47
-
48
- /**
49
- * 统一的外部用户检测函数
50
- * 这是系统中唯一的用户类型检测入口,仅在路由守卫中调用
51
- * 集成了用户类型检测和认证参数解析功能
52
- *
53
- * @param to 目标路由对象
54
- * @returns 外部用户检测结果,包含是否为外部用户和认证参数
55
- */
56
- export function isExternalUser(to: RouteLocationNormalized): ExternalUserResult {
57
- console.log('[Platform Detection] 开始检测外部用户环境', { path: to.path, query: to.query })
58
-
59
- // 第一层检测:URL参数检测(最高优先级)判断公众号登录逻辑
60
- // 检查路由查询参数中是否有授权参数(code + state)
61
- const { code, state, appData } = to.query
62
- if (code && state) {
63
- // 解析认证参数
64
- const authParams = {
65
- code: code as string,
66
- state: state as string,
67
- tenantName: state as string,
68
- platformUserId: code as string,
69
- platformType: PlatformType.WECHAT_OFFICIAL,
70
- }
71
-
72
- return {
73
- isExternal: true,
74
- authParams,
75
- }
76
- }
77
-
78
- // 第二层检测:User-Agent环境检测
79
- // 检查浏览器环境是否为第三方平台
80
- const env = detectEnvironment()
81
- // 微信小程序
82
- if (env.isMiniprogram && appData) {
83
- const authParams = {
84
- platformType: PlatformType.WECHAT_MINI,
85
- appData,
86
- }
87
- // 暂未实现 后续需要增加登陆参数
88
- return {
89
- isExternal: true,
90
- authParams,
91
- }
92
- }
93
- // 微信环境检测
94
- if (env.isWechat) {
95
- console.log('[Platform Detection] 检测到微信环境,判定为外部用户(无授权参数)')
96
- return {
97
- isExternal: true,
98
- authParams: Object.assign(to.query, {
99
- platformType: PlatformType.WECHAT_OFFICIAL,
100
- tenantName: to.query.state as string || '',
101
- }),
102
- }
103
- }
104
-
105
- // 支付宝环境检测
106
- if (env.isAlipayClient) {
107
- // 暂未实现 后续需要增加登陆参数
108
- return {
109
- isExternal: true,
110
- authParams: {
111
- platformType: PlatformType.ALIPAY,
112
- },
113
- }
114
- }
115
-
116
- // 钉钉环境检测
117
- if (env.isDingTalk) {
118
- // 暂未实现 后续需要增加登陆参数
119
- return {
120
- isExternal: true,
121
- authParams: {
122
- platformType: PlatformType.DINGTALK,
123
- },
124
- }
125
- }
126
-
127
- // 第三层检测:路由前缀检测
128
- // 检查路径是否以外部用户路由前缀开头
129
- const platformPrefixes = Object.values(PLATFORM_ROUTE_MAP)
130
- const isExternalRoute = platformPrefixes.some(prefix => to.path.startsWith(prefix)) || to.path.startsWith('/ex/')
131
- if (isExternalRoute) {
132
- // 暂未实现 后续需要增加登陆参数
133
- return {
134
- isExternal: true,
135
- authParams: Object.assign(to.query, {
136
- platformType: PlatformType.WECHAT_OFFICIAL,
137
- tenantName: to.query.state as string || '',
138
- }),
139
- }
140
- }
141
-
142
- // [Platform Detection] 未检测到外部用户环境,判定为内部用户
143
- return { isExternal: false }
144
- }
145
-
146
- // 兼容性导出 - 保持向后兼容
147
- export function isWechat(): boolean {
148
- const ua = navigator.userAgent.toLowerCase()
149
- return /micromessenger/i.test(ua)
150
- }
1
+ /**
2
+ * 统一平台认证工具类
3
+ * 合并了 wechatUtil.ts, wechat.ts 和 auth-platform.ts 的功能
4
+ */
5
+
6
+ import type { RouteLocationNormalized } from 'vue-router'
7
+ import { PLATFORM_ROUTE_MAP, PlatformType } from '@af-mobile-client-vue3/types/platform'
8
+ import { detectEnvironment } from '@af-mobile-client-vue3/utils/environment'
9
+ /**
10
+ * 认证参数接口
11
+ */
12
+ export interface AuthParams {
13
+ /** 授权码 */
14
+ code?: string
15
+ /** 状态参数 */
16
+ state?: string
17
+ /** 租户名称 */
18
+ tenantName?: string
19
+ /** 平台类型 */
20
+ platformType?: PlatformType
21
+ /** 错误信息 */
22
+ error?: string
23
+ /** 错误描述 */
24
+ error_description?: string
25
+ }
26
+
27
+ /**
28
+ * 微信回调参数接口(向后兼容)
29
+ */
30
+ export interface WechatCallbackParams extends AuthParams { }
31
+
32
+ /**
33
+ * 外部用户检测结果接口
34
+ */
35
+ export interface ExternalUserResult {
36
+ /** 是否为外部用户 */
37
+ isExternal: boolean
38
+ /** 认证参数(仅当 isExternal 为 true 且有授权参数时存在) */
39
+ authParams?: {
40
+ code?: string
41
+ state?: string
42
+ tenantName?: string
43
+ platformType?: string
44
+ platformUserId?: string
45
+ }
46
+ }
47
+
48
+ /**
49
+ * 统一的外部用户检测函数
50
+ * 这是系统中唯一的用户类型检测入口,仅在路由守卫中调用
51
+ * 集成了用户类型检测和认证参数解析功能
52
+ *
53
+ * @param to 目标路由对象
54
+ * @returns 外部用户检测结果,包含是否为外部用户和认证参数
55
+ */
56
+ export function isExternalUser(to: RouteLocationNormalized): ExternalUserResult {
57
+ console.log('[Platform Detection] 开始检测外部用户环境', { path: to.path, query: to.query })
58
+
59
+ // 第一层检测:URL参数检测(最高优先级)判断公众号登录逻辑
60
+ // 检查路由查询参数中是否有授权参数(code + state)
61
+ const { code, state, appData } = to.query
62
+ if (code && state) {
63
+ // 解析认证参数
64
+ const authParams = {
65
+ code: code as string,
66
+ state: state as string,
67
+ tenantName: state as string,
68
+ platformUserId: code as string,
69
+ platformType: PlatformType.WECHAT_OFFICIAL,
70
+ }
71
+
72
+ return {
73
+ isExternal: true,
74
+ authParams,
75
+ }
76
+ }
77
+
78
+ // 第二层检测:User-Agent环境检测
79
+ // 检查浏览器环境是否为第三方平台
80
+ const env = detectEnvironment()
81
+ // 微信小程序
82
+ if (env.isMiniprogram && appData) {
83
+ const authParams = {
84
+ platformType: PlatformType.WECHAT_MINI,
85
+ appData,
86
+ }
87
+ // 暂未实现 后续需要增加登陆参数
88
+ return {
89
+ isExternal: true,
90
+ authParams,
91
+ }
92
+ }
93
+ // 微信环境检测
94
+ if (env.isWechat) {
95
+ console.log('[Platform Detection] 检测到微信环境,判定为外部用户(无授权参数)')
96
+ return {
97
+ isExternal: true,
98
+ authParams: Object.assign(to.query, {
99
+ platformType: PlatformType.WECHAT_OFFICIAL,
100
+ tenantName: to.query.state as string || '',
101
+ }),
102
+ }
103
+ }
104
+
105
+ // 支付宝环境检测
106
+ if (env.isAlipayClient) {
107
+ // 暂未实现 后续需要增加登陆参数
108
+ return {
109
+ isExternal: true,
110
+ authParams: {
111
+ platformType: PlatformType.ALIPAY,
112
+ },
113
+ }
114
+ }
115
+
116
+ // 钉钉环境检测
117
+ if (env.isDingTalk) {
118
+ // 暂未实现 后续需要增加登陆参数
119
+ return {
120
+ isExternal: true,
121
+ authParams: {
122
+ platformType: PlatformType.DINGTALK,
123
+ },
124
+ }
125
+ }
126
+
127
+ // 第三层检测:路由前缀检测
128
+ // 检查路径是否以外部用户路由前缀开头
129
+ const platformPrefixes = Object.values(PLATFORM_ROUTE_MAP)
130
+ const isExternalRoute = platformPrefixes.some(prefix => to.path.startsWith(prefix)) || to.path.startsWith('/ex/')
131
+ if (isExternalRoute) {
132
+ // 暂未实现 后续需要增加登陆参数
133
+ return {
134
+ isExternal: true,
135
+ authParams: Object.assign(to.query, {
136
+ platformType: PlatformType.WECHAT_OFFICIAL,
137
+ tenantName: to.query.state as string || '',
138
+ }),
139
+ }
140
+ }
141
+
142
+ // [Platform Detection] 未检测到外部用户环境,判定为内部用户
143
+ return { isExternal: false }
144
+ }
145
+
146
+ // 兼容性导出 - 保持向后兼容
147
+ export function isWechat(): boolean {
148
+ const ua = navigator.userAgent.toLowerCase()
149
+ return /micromessenger/i.test(ua)
150
+ }
@@ -1,57 +1,57 @@
1
- /**
2
- * 根据类型获取日期区间字符串
3
- * @param type '当年' | 'curMonth' | '当日'
4
- * @param show 区分实际值还是显示值, true为实际值, false为显示值
5
- * @returns [start, end] 例:['2024-01-01 00:00:00', '2024-12-31 23:59:59']
6
- */
7
- export function getRangeByType(type: string, show: boolean): [string, string] {
8
- const now = new Date()
9
- const year = now.getFullYear()
10
- const month = (now.getMonth() + 1).toString().padStart(2, '0')
11
- const day = now.getDate().toString().padStart(2, '0')
12
-
13
- if (!show) {
14
- if (type === 'curYear') {
15
- return [
16
- `${year}-01-01 00:00:00`,
17
- `${year}-12-31 23:59:59`,
18
- ]
19
- }
20
- if (type === 'curMonth') {
21
- const lastDay = new Date(year, now.getMonth() + 1, 0).getDate()
22
- return [
23
- `${year}-${month}-01 00:00:00`,
24
- `${year}-${month}-${lastDay.toString().padStart(2, '0')} 23:59:59`,
25
- ]
26
- }
27
- if (type === 'curDay') {
28
- return [
29
- `${year}-${month}-${day} 00:00:00`,
30
- `${year}-${month}-${day} 23:59:59`,
31
- ]
32
- }
33
- }
34
- if (show) {
35
- if (type === 'curYear') {
36
- return [
37
- `${year}-01-01`,
38
- `${year}-12-31`,
39
- ]
40
- }
41
- if (type === 'curMonth') {
42
- const lastDay = new Date(year, now.getMonth() + 1, 0).getDate()
43
- return [
44
- `${year}-${month}-01`,
45
- `${year}-${month}-${lastDay.toString().padStart(2, '0')}`,
46
- ]
47
- }
48
- if (type === 'curDay') {
49
- return [
50
- `${year}-${month}-${day}`,
51
- `${year}-${month}-${day}`,
52
- ]
53
- }
54
- }
55
- // 兜底返回空字符串数组
56
- return ['', '']
57
- }
1
+ /**
2
+ * 根据类型获取日期区间字符串
3
+ * @param type '当年' | 'curMonth' | '当日'
4
+ * @param show 区分实际值还是显示值, true为实际值, false为显示值
5
+ * @returns [start, end] 例:['2024-01-01 00:00:00', '2024-12-31 23:59:59']
6
+ */
7
+ export function getRangeByType(type: string, show: boolean): [string, string] {
8
+ const now = new Date()
9
+ const year = now.getFullYear()
10
+ const month = (now.getMonth() + 1).toString().padStart(2, '0')
11
+ const day = now.getDate().toString().padStart(2, '0')
12
+
13
+ if (!show) {
14
+ if (type === 'curYear') {
15
+ return [
16
+ `${year}-01-01 00:00:00`,
17
+ `${year}-12-31 23:59:59`,
18
+ ]
19
+ }
20
+ if (type === 'curMonth') {
21
+ const lastDay = new Date(year, now.getMonth() + 1, 0).getDate()
22
+ return [
23
+ `${year}-${month}-01 00:00:00`,
24
+ `${year}-${month}-${lastDay.toString().padStart(2, '0')} 23:59:59`,
25
+ ]
26
+ }
27
+ if (type === 'curDay') {
28
+ return [
29
+ `${year}-${month}-${day} 00:00:00`,
30
+ `${year}-${month}-${day} 23:59:59`,
31
+ ]
32
+ }
33
+ }
34
+ if (show) {
35
+ if (type === 'curYear') {
36
+ return [
37
+ `${year}-01-01`,
38
+ `${year}-12-31`,
39
+ ]
40
+ }
41
+ if (type === 'curMonth') {
42
+ const lastDay = new Date(year, now.getMonth() + 1, 0).getDate()
43
+ return [
44
+ `${year}-${month}-01`,
45
+ `${year}-${month}-${lastDay.toString().padStart(2, '0')}`,
46
+ ]
47
+ }
48
+ if (type === 'curDay') {
49
+ return [
50
+ `${year}-${month}-${day}`,
51
+ `${year}-${month}-${day}`,
52
+ ]
53
+ }
54
+ }
55
+ // 兜底返回空字符串数组
56
+ return ['', '']
57
+ }
@@ -1,138 +1,107 @@
1
- <script setup lang="ts">
2
- import XCellList from '@af-mobile-client-vue3/components/data/XCellList/index.vue'
3
- import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
- import { useUserStore } from '@af-mobile-client-vue3/stores/modules/user'
5
- import { defineEmits, ref } from 'vue'
6
- import { useRouter } from 'vue-router'
7
-
8
- // 定义事件
9
- const emit = defineEmits(['deleteRow'])
10
-
11
- // 多选操作配置
12
- const multiSelectActions = ref([
13
- { name: '批量审核', key: 'batchAudit', color: '#000000', icon: 'passed' },
14
- ])
15
-
16
- const userInfo = useUserStore().getUserInfo()
17
- // 访问路由
18
- const router = useRouter()
19
- // 获取默认值
20
- const idKey = ref('o_id')
21
-
22
- // 简易crud表单测试
23
- const configName = ref('lngChargeAuditMobileCRUD')
24
- const serviceName = ref('af-gaslink')
25
-
26
- // 资源权限测试
27
- // const configName = ref('crud_sources_test')
28
- // const serviceName = ref('af-system')
29
-
30
- // 实际业务测试
31
- // const configName = ref('lngChargeAuditMobileCRUD')
32
- // const serviceName = ref('af-gaslink')
33
-
34
- // 跳转到详情页面
35
- // function toDetail(item) {
36
- // router.push({
37
- // name: 'XCellDetailView',
38
- // params: { id: item[idKey.value] }, // 如果使用命名路由,推荐使用路由参数而不是直接构建 URL
39
- // query: {
40
- // operName: item[operNameKey.value],
41
- // method:item[methodKey.value],
42
- // requestMethod:item[requestMethodKey.value],
43
- // operatorType:item[operatorTypeKey.value],
44
- // operUrl:item[operUrlKey.value],
45
- // operIp:item[operIpKey.value],
46
- // costTime:item[costTimeKey.value],
47
- // operTime:item[operTimeKey.value],
48
- //
49
- // title: item[titleKey.value],
50
- // businessType: item[businessTypeKey.value],
51
- // status:item[statusKey.value]
52
- // }
53
- // })
54
- // }
55
-
56
- // 跳转到表单——以表单组来渲染纯表单
57
- function toDetail(item) {
58
- router.push({
59
- name: 'XFormView',
60
- query: {
61
- id: item[idKey.value],
62
- // id: item.rr_id,
63
- // o_id: item.o_id,
64
- },
65
- })
66
- }
67
-
68
- // 新增功能
69
- // function addOption(totalCount) {
70
- // router.push({
71
- // name: 'XFormView',
72
- // params: { id: totalCount, openid: totalCount },
73
- // query: {
74
- // configName: configName.value,
75
- // serviceName: serviceName.value,
76
- // mode: '新增',
77
- // },
78
- // })
79
- // }
80
-
81
- // 修改功能
82
- // function updateRow(result) {
83
- // router.push({
84
- // name: 'XFormView',
85
- // params: { id: result.o_id, openid: result.o_id },
86
- // query: {
87
- // configName: configName.value,
88
- // serviceName: serviceName.value,
89
- // mode: '修改',
90
- // },
91
- // })
92
- // }
93
-
94
- // 删除功能
95
- function deleteRow(result) {
96
- emit('deleteRow', result.o_id)
97
- }
98
-
99
- // 多选操作处理
100
- function handleMultiSelectAction(action: string, selectedItems: any[], selectedItemsArray: any[]) {
101
- console.log('多选操作:', action, selectedItems, selectedItemsArray)
102
- }
103
-
104
- // 选择变化处理
105
- function handleSelectionChange(selectedItems: any[]) {
106
- console.log('选择变化,当前选中:', selectedItems.length, '个项目')
107
- // 可以在这里更新UI状态,比如显示选中数量等
108
- }
109
-
110
- // 数据加载完成后处理 @after-load
111
- function afterLoad(result) {
112
- console.log('afterLoad:', result)
113
- }
114
- function emitFunc(func, data) {
115
- console.log('emitFunc:', func, data)
116
- }
117
- </script>
118
-
119
- <template>
120
- <NormalDataLayout id="XCellListView" title="工作计划">
121
- <template #layout_content>
122
- <XCellList
123
- config-name="scanCodeAndNFCRUD"
124
- service-name="af-safecheck"
125
- :enable-multi-select="true"
126
- id-key="t_id"
127
- :multi-select-actions="multiSelectActions"
128
- @to-detail="toDetail"
129
- @multi-select-action="handleMultiSelectAction"
130
- @selection-change="handleSelectionChange"
131
- @x-form-item-emit-func="emitFunc"
132
- />
133
- </template>
134
- </NormalDataLayout>
135
- </template>
136
-
137
- <style scoped lang="less">
138
- </style>
1
+ <script setup lang="ts">
2
+ import XCellList from '@af-mobile-client-vue3/components/data/XCellList/index.vue'
3
+ import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
+ import { defineEmits, ref } from 'vue'
5
+ import { useRouter } from 'vue-router'
6
+
7
+ // 定义事件
8
+ const emit = defineEmits(['deleteRow'])
9
+ // 访问路由
10
+ const router = useRouter()
11
+ // 获取默认值
12
+ // const idKey = ref('o_id')
13
+
14
+ // 简易crud表单测试
15
+ const configName = ref('ceshiCRUD')
16
+ const serviceName = ref('af-safecheck')
17
+
18
+ // 资源权限测试
19
+ // const configName = ref('crud_sources_test')
20
+ // const serviceName = ref('af-system')
21
+
22
+ // 实际业务测试
23
+ // const configName = ref('lngChargeAuditMobileCRUD')
24
+ // const serviceName = ref('af-gaslink')
25
+
26
+ // 跳转到详情页面
27
+ // function toDetail(item) {
28
+ // router.push({
29
+ // name: 'XCellDetailView',
30
+ // params: { id: item[idKey.value] }, // 如果使用命名路由,推荐使用路由参数而不是直接构建 URL
31
+ // query: {
32
+ // operName: item[operNameKey.value],
33
+ // method:item[methodKey.value],
34
+ // requestMethod:item[requestMethodKey.value],
35
+ // operatorType:item[operatorTypeKey.value],
36
+ // operUrl:item[operUrlKey.value],
37
+ // operIp:item[operIpKey.value],
38
+ // costTime:item[costTimeKey.value],
39
+ // operTime:item[operTimeKey.value],
40
+ //
41
+ // title: item[titleKey.value],
42
+ // businessType: item[businessTypeKey.value],
43
+ // status:item[statusKey.value]
44
+ // }
45
+ // })
46
+ // }
47
+
48
+ // 跳转到表单——以表单组来渲染纯表单
49
+ // function toDetail(item) {
50
+ // router.push({
51
+ // name: 'XFormGroupView',
52
+ // query: {
53
+ // id: item[idKey.value],
54
+ // // id: item.rr_id,
55
+ // // o_id: item.o_id,
56
+ // },
57
+ // })
58
+ // }
59
+
60
+ // 新增功能
61
+ // function addOption(totalCount) {
62
+ // router.push({
63
+ // name: 'XFormView',
64
+ // params: { id: totalCount, openid: totalCount },
65
+ // query: {
66
+ // configName: configName.value,
67
+ // serviceName: serviceName.value,
68
+ // mode: '新增',
69
+ // },
70
+ // })
71
+ // }
72
+
73
+ // 修改功能
74
+ // function updateRow(result) {
75
+ // router.push({
76
+ // name: 'XFormView',
77
+ // params: { id: result.o_id, openid: result.o_id },
78
+ // query: {
79
+ // configName: configName.value,
80
+ // serviceName: serviceName.value,
81
+ // mode: '修改',
82
+ // },
83
+ // })
84
+ // }
85
+
86
+ // 删除功能
87
+ // function deleteRow(result) {
88
+ // emit('deleteRow', result.o_id)
89
+ // }
90
+ // const fixQueryForm = ref({
91
+ // f_operator_id: '487184754014158848',
92
+ // })
93
+ </script>
94
+
95
+ <template>
96
+ <NormalDataLayout id="XCellListView" title="工作计划">
97
+ <template #layout_content>
98
+ <XCellList
99
+ :config-name="configName"
100
+ :service-name="serviceName"
101
+ />
102
+ </template>
103
+ </NormalDataLayout>
104
+ </template>
105
+
106
+ <style scoped lang="less">
107
+ </style>