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