Object.keys(components).forEach

本文介绍了一种使用Node.js遍历指定目录下所有子目录的方法,并收集这些子目录中特定配置文件的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object.keys(components).forEach(key => {
  const filePath = path.join(__dirname, `../../packages/${key}/cooking.conf.js`);

  if (existsSync(filePath)) {
    componentPaths.push(`packages/${key}/cooking.conf.js`);
  }
});


(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["common/main"],{"2e33":function(e,t,n){"use strict";(function(e,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o={onLaunch:function(){this.setEnable();var t=e.getMenuButtonBoundingClientRect().top;this.$lib.$store.commit("setMenuButtonInfo",t),console.log("App Launch")},onShow:function(){console.log("App Show")},onHide:function(){console.log("App Hide")},methods:{setEnable:function(){n.setEnable1v1Chat({enable:!0,success:function(e){},fail:function(e){console.log(e)}})}}};t.default=o}).call(this,n("543d")["default"],n("bc2e")["default"])},"3c24":function(e,t,n){"use strict";(function(e,t,o){var c=n("4ea4"),r=c(n("9523"));n("f784");var u=c(n("66fd")),l=c(n("f7fc")),a=c(n("dead"));c(n("bff2"));function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}e.__webpack_require_UNI_MP_PLUGIN__=n,u.default.config.productionTip=!1,l.default.mpType="app",u.default.prototype.$lib=a.default;u.default.component("mescroll-body",(function(){Promise.all([n.e("common/vendor"),n.e("components/mescroll-uni/mescroll-body")]).then(function(){return resolve(n("768e"))}.bind(null,n)).catch(n.oe)})),u.default.component("mescroll-uni",(function(){Promise.all([n.e("common/vendor"),n.e("components/mescroll-uni/mescroll-uni")]).then(function(){return resolve(n("e390"))}.bind(null,n)).catch(n.oe)})),u.default.prototype.$navigateBack=function(){t.navigateBack({delta:1})};var f=a.default.$store,s=new u.default(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){(0,r.default)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({store:f},l.default));o(s).$mount()}).call(this,n("bc2e")["default"],n("543d")["default"],n("543d")["createApp"])},b1e4:function(e,t,n){"use strict";var o=n("daf0"),c=n.n(o);c.a},daf0:function(e,t,n){},f37a:function(e,t,n){"use strict";n.r(t);var o=n("2e33"),c=n.n(o);for(var r in o)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return o[e]}))}(r);t["default"]=c.a},f7fc:function(e,t,n){"use strict";n.r(t);var o=n("f37a");for(var c in o)["default"].indexOf(c)<0&&function(e){n.d(t,e,(function(){return o[e]}))}(c);n("b1e4");var r=n("f0c5"),u=Object(r["a"])(o["default"],void 0,void 0,!1,null,null,null,!1,void 0,void 0);t["default"]=u.exports}},[["3c24","common/runtime","common/vendor"]]]);解释一下
05-24
<template> <div class="login-container"> <CustomForm class="login-form"> <CustomFormItem label="账号"> <CustomInput v-model="form.employeeId" placeholder="请输入账号" /> </CustomFormItem> <CustomFormItem label="密码"> <CustomInput v-model="form.password" type="password" placeholder="请输入密码" :show-password="true"/> </CustomFormItem> <CustomFormItem> <button class="custom-button" @click.prevent="onSubmit" :disabled="loading"> <span v-if="!loading">提交</span> <span v-else class="loading">登录中...</span> </button> </CustomFormItem> <CustomFormItem v-if="errorMessage" class="error-container"> <div class="error-message"> {{ errorMessage }} </div> </CustomFormItem> </CustomForm> </div> </template> <script setup> import { ref, reactive } from 'vue' import { useRouter } from 'vue-router' import useUserStore from '@/store/modules/user' import productApi from '@/api/products' import CustomInput from '@/components/zhangaipiao/customInput.vue' import CustomForm from '@/components/zhangaipiao/customForm.vue' import CustomFormItem from '@/components/zhangaipiao/customFormItem.vue' const userStore = useUserStore() const router = useRouter() const loading = ref(false) const errorMessage = ref('') const form = reactive({ employeeId: '', password: '', role: '', employeeName: '' }) // 记录用户是否触碰过输入框,用于控制错误提示是否显示 const touched = reactive({ employeeId: false, password: false }) // 字段验证规则 const rules = { employeeId: { required: true, message: '账号不能为空' }, password: { required: true, message: '密码不能为空' } } // 字段错误信息 const errors = reactive({ employeeId: '', password: '' }) const validateField = (field) => { const rule = rules[field] const value = form[field] if (rule && rule.required && (!value || !value.trim())) { errors[field] = rule.message return false } errors[field] = '' return true } const validateForm = () => { // 标记所有字段为已触碰 Object.keys(touched).forEach(key => { touched[key] = true }) // 验证所有字段 const validResults = Object.keys(rules).map(field => validateField(field)) return validResults.every(result => result) } const onSubmit = async () => { if (!validateForm()) { errorMessage.value = '请填写账号和密码' return } errorMessage.value = '' loading.value = true try { const userData = await loginWithBackend() userStore.login({ ...userData, employeeId: form.employeeId }) router.push('home') } catch (error) { errorMessage.value = error.message } finally { loading.value = false } } const loginWithBackend = async () => { try { const response = await productApi.selectLogin(form) if (response?.status === 200 && response.data) { return response.data } throw new Error(response?.message || '登录失败,请检查账号密码') } catch (error) { throw new Error(error.message || '网络错误,请稍后再试') } } </script> <style scoped src="@/assets/styles.css"></style> <style scoped> :deep(.form-item) { margin-bottom: 0.5rem; } .login-container { display: flex; min-height: 100vh; background-color: #e0f7ff; /* 浅蓝色背景 */ } </style> 哪些代码是多余的
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值