From 06097837de2d955665d5575dbe8e94588f00af91 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周日, 04 5月 2025 21:47:33 +0800
Subject: [PATCH] 222
---
HIAWms/web/src/components/ProjectConfig/ProjectConfig.tsx | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 162 insertions(+), 0 deletions(-)
diff --git a/HIAWms/web/src/components/ProjectConfig/ProjectConfig.tsx b/HIAWms/web/src/components/ProjectConfig/ProjectConfig.tsx
new file mode 100644
index 0000000..3f65ef6
--- /dev/null
+++ b/HIAWms/web/src/components/ProjectConfig/ProjectConfig.tsx
@@ -0,0 +1,162 @@
+import { defineComponent, Fragment, ref } from 'vue'
+import BaseDialog from '../BaseDialog/BaseDialog'
+import { useVModel } from '@vueuse/core'
+import styles from './ProjectConfig.module.scss'
+import { getProjectConfig, createWidget } from '@/api/project-api'
+import { menu, menuMap } from '@/config/menu'
+import Icon from '../Icon/Icon'
+import IconButton from '../IconButton/IconButton'
+import DyForm from '../DyForm/DyForm'
+import { ElLoading, ElMessage } from 'element-plus'
+
+export default defineComponent({
+ name: 'project',
+ props: {
+ modelValue: {
+ type: Boolean,
+ default: false,
+ },
+ },
+ setup(props, { emit }) {
+ const visible = useVModel(props, 'modelValue', emit)
+ const baseVisible = ref(false)
+ const build = ref([])
+ const local = ref([])
+ const formData = ref({})
+ const formRef = ref()
+ const openType = ref(1)
+ const onOpenDialog = async () => {
+ const buildProd = await getProjectConfig('.build.prod')
+ const localProd = await getProjectConfig('.build.local')
+ if (buildProd) {
+ try {
+ build.value = (
+ (buildProd.data && buildProd.data.split('\n')) ||
+ []
+ ).filter((v) => v)
+ local.value = (
+ (localProd.data && localProd.data.split('\n')) ||
+ []
+ ).filter((v) => v)
+ } catch (error) {
+ console.error(error)
+ }
+ }
+ }
+ const onConfirm = () => {
+ visible.value = false
+ }
+ const onClose = () => {
+ visible.value = false
+ }
+ const onAddWidget = (type: number) => {
+ baseVisible.value = true
+ openType.value = type
+ }
+ const onBaseConfirm = async () => {
+ await formRef.value.validate()
+ const loading = ElLoading.service({
+ lock: true,
+ text: '鍒涘缓涓紝璇风◢鍚�...',
+ background: 'rgba(0, 0, 0, 0.7)',
+ })
+ loading.close()
+ await createWidget({
+ ...formData.value,
+ type: openType.value,
+ menu,
+ menuMap,
+ })
+
+ onBaseClose()
+ }
+ const onBaseClose = () => {
+ baseVisible.value = false
+ }
+ return () => {
+ return (
+ <Fragment>
+ <BaseDialog
+ onOpen={onOpenDialog}
+ width="700px"
+ title="椤圭洰閰嶇疆"
+ v-model={visible.value}
+ onConfirm={onConfirm}
+ onClose={onClose}
+ >
+ <div class={styles.projectConfig}>
+ <div class={styles.leftPane}>
+ <div class={styles.header}>
+ <h3 style="margin:0;">涓氬姟缁勪欢</h3>
+ <IconButton
+ onClick={() => onAddWidget(1)}
+ icon="add-p"
+ status="add"
+ >
+ 娣诲姞
+ </IconButton>
+ </div>
+ <div class={styles.list}>
+ {local.value.length ? (
+ local.value.map((item) => (
+ <div class={styles.item}>
+ <div class={styles.itemContent}>
+ <span class={styles.span}>{menuMap[item]?.name}</span>
+ </div>
+ <el-tag>{item}</el-tag>
+ </div>
+ ))
+ ) : (
+ <el-empty style="margin-left: 39%;" />
+ )}
+ </div>
+ </div>
+ </div>
+ </BaseDialog>
+ <BaseDialog
+ title="娣诲姞缁勪欢"
+ v-model={baseVisible.value}
+ onConfirm={onBaseConfirm}
+ onClose={onBaseClose}
+ >
+ <DyForm
+ v-model:formData={formData.value}
+ ref={formRef}
+ formItemProps={[
+ {
+ prop: 'widgetName',
+ label: '缁勪欢鍚嶇О',
+ el: 'input',
+ placeholder: '璇疯緭鍏ョ粍浠跺悕绉�',
+ rules: [
+ {
+ required: true,
+ message: '璇疯緭鍏ョ粍浠跺悕绉�',
+ },
+ ],
+ },
+ {
+ prop: 'widgetId',
+ label: '缁勪欢ID',
+ placeholder: 'ProcessManagement',
+ el: 'input',
+ rules: [
+ {
+ required: true,
+ message: '璇疯緭鍏ョ粍浠禝D',
+ },
+ {
+ message: '棣栧瓧姣嶅繀椤讳负澶у啓锛屼笉鑳芥湁鏁板瓧鍜岀壒娈婄鍙�',
+ pattern: /^[A-Z][A-Za-z]*$/,
+ trigger: 'blur',
+ },
+ ],
+ },
+ ]}
+ ></DyForm>
+ </BaseDialog>
+ </Fragment>
+ )
+ }
+ },
+})
--
Gitblit v1.9.3