From 92d989c80246f16ea94466d1ce60ef9f6dc7e675 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周一, 05 5月 2025 23:43:41 +0800
Subject: [PATCH] 库存管理

---
 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