浏览代码

feat: save

gemercheung 6 月之前
父节点
当前提交
0eca68cb83

+ 13 - 8
packages/frontend/src/views/article/add.vue

@@ -45,7 +45,7 @@
             <n-tab-pane :name="lang" :tab="langLabel[lang]" :index="index">
               <n-form-item
                 label="文章名称" path="title" :rule="{
-                  required: false,
+                  required: true,
                   message: '请输入文章名称',
                   trigger: ['input', 'blur'],
                 }"
@@ -100,14 +100,19 @@ categoryApi.getAll().then(({ data = [] }) => (allCategory.value = data))
 function handleAdd() {
   modalFormRef.value?.validate((errors) => {
     if (!errors) {
-      const zhTrans = modalForm.value.translations.find(i => i.locale === 'zh')
-      // debugger
-      if (zhTrans.title === '') {
-        zhTrans.title = modalForm.value.title
+      let isPass = true
+      langs.value.forEach((lang) => {
+        const trans = modalForm.value.translations.find(i => i.locale === lang)
+        if (trans.title === '') {
+          window.$message.error(`请填写文章名称${langLabel[lang]}标题!`)
+          isPass = false
+        }
+      })
+      if (isPass) {
+        articleApi.create(modalForm.value)
+        $message.success('保存成功!')
+        router.push('/article')
       }
-      articleApi.create(modalForm.value)
-      $message.success('保存成功!')
-      router.push('/article')
     }
     else {
       $message.error('请填写对应项!')

+ 14 - 4
packages/frontend/src/views/article/edit.vue

@@ -31,7 +31,7 @@
           <template v-for="(lang, index) in langs" :key="lang">
             <n-tab-pane :name="lang" :tab="langLabel[lang]" :index="index">
               <n-form-item label="文章名称" path="title" :rule="{
-                required: false,
+                required: true,
                 message: '请输入文章名称',
                 trigger: ['input', 'blur'],
               }">
@@ -93,9 +93,19 @@ categoryApi.getAll().then(({ data = [] }) => (allCategory.value = data))
 function handleEdit() {
   modalFormRef.value?.validate((errors) => {
     if (!errors) {
-      articleApi.update(modalForm.value)
-      $message.success('保存成功!')
-      router.push('/article')
+      let isPass = true
+      langs.value.forEach((lang) => {
+        const trans = modalForm.value.translations.find(i => i.locale === lang)
+        if (trans.title === '') {
+          window.$message.error(`请填写文章名称${langLabel[lang]}标题!`)
+          isPass = false
+        }
+      })
+      if (isPass) {
+        articleApi.update(modalForm.value)
+        $message.success('保存成功!')
+        router.push('/article')
+      }
     }
     else {
       $message.error('请填写对应项!')

+ 25 - 28
packages/frontend/src/views/category/index.vue

@@ -14,24 +14,20 @@
         </n-input>
       </MeQueryItem>
       <MeQueryItem label="状态" :label-width="50">
-        <n-select
-          v-model:value="queryItems.enable" clearable :options="[
-            { label: '启用', value: 1 },
-            { label: '停用', value: 0 },
-          ]"
-        />
+        <n-select v-model:value="queryItems.enable" clearable :options="[
+          { label: '启用', value: 1 },
+          { label: '停用', value: 0 },
+        ]" />
       </MeQueryItem>
     </MeCrud>
 
     <MeModal ref="modalRef" width="520px">
       <n-form ref="modalFormRef" label-placement="left" label-align="left" :label-width="80" :model="modalForm">
-        <n-form-item
-          label="分类名" path="title" :rule="{
-            required: true,
-            message: '请输入分类名',
-            trigger: ['input', 'blur'],
-          }"
-        >
+        <n-form-item label="分类名" path="title" :rule="{
+          required: true,
+          message: '请输入分类名',
+          trigger: ['input', 'blur'],
+        }">
           <n-input v-model:value="modalForm.title" />
         </n-form-item>
         <n-form-item label="上层分类" path="parentId">
@@ -44,23 +40,19 @@
         <n-tabs v-if="modalForm.translations.length > 0" type="line" animated>
           <template v-for="(lang, index) in langs" :key="lang">
             <n-tab-pane :name="lang" :tab="langLabel[lang]" :index="index">
-              <n-form-item
-                label="名称" path="title" :rule="{
-                  required: true,
-                  message: '请输入名称',
-                  trigger: ['input', 'blur'],
-                }"
-              >
+              <n-form-item label="名称" path="title" :rule="{
+                required: true,
+                message: '请输入名称',
+                trigger: ['input', 'blur'],
+              }">
                 <n-input v-model:value="modalForm.translations[index].title" />
               </n-form-item>
 
-              <n-form-item
-                label="备注" path="remark" :rule="{
-                  required: false,
-                  message: '请输入备注',
-                  trigger: ['input', 'blur'],
-                }"
-              >
+              <n-form-item label="备注" path="remark" :rule="{
+                required: false,
+                message: '请输入备注',
+                trigger: ['input', 'blur'],
+              }">
                 <n-input v-model:value="modalForm.translations[index].remark" type="textarea" />
               </n-form-item>
             </n-tab-pane>
@@ -217,8 +209,13 @@ async function handleFormEdit(data = {}) {
 function handleModalAdd() {
   modalForm.value.translations = initTranslations({}, ['title', 'remark']).translations
   handleAdd()
+  getALLCate()
 }
 
 const allCategory = ref([])
-api.getAll().then(({ data = [] }) => (allCategory.value = data.map(item => ({ label: item.title, value: item.id }))))
+
+function getALLCate() {
+  api.getAll().then(({ data = [] }) => (allCategory.value = data.map(item => ({ label: item.title, value: item.id }))))
+}
+getALLCate()
 </script>

+ 51 - 33
packages/frontend/src/views/menu/index.vue

@@ -18,8 +18,10 @@
                   <n-card :bordered="false" size="small">
                     <template #cover>
                       <!-- <div style="width: 100%;height: 50px;overflow: hidden;"> -->
-                      <n-image preview-disabled :src="child.cover" object-fit="scale-down"
-                        style="width: 100%;height: 50px;overflow: hidden;" />
+                      <n-image
+                        preview-disabled :src="child.cover" object-fit="scale-down"
+                        style="width: 100%;height: 50px;overflow: hidden;"
+                      />
                       <!-- </div> -->
                     </template>
                     <div class="text-center text-12">
@@ -36,8 +38,10 @@
             </template>
           </div>
           <template #header-extra>
-            <n-dropdown class="menu_dropdown" trigger="click" :options="options" :show-arrow="true"
-              @select="(key) => handleSelect(key, item)">
+            <n-dropdown
+              class="menu_dropdown" trigger="click" :options="options" :show-arrow="true"
+              @select="(key) => handleSelect(key, item)"
+            >
               <n-button text>
                 <i class="i-material-symbols:more-horiz text-24" />
               </n-button>
@@ -49,47 +53,59 @@
 
     <MeModal ref="modalRef" width="520px">
       <n-form ref="modalFormRef" label-placement="left" label-align="left" :label-width="80" :model="modalForm">
-        <n-form-item label="名称" path="title" :rule="{
-          required: true,
-          message: '请输入名称',
-          trigger: ['input', 'blur'],
-        }">
+        <n-form-item
+          label="名称" path="title" :rule="{
+            required: true,
+            message: '请输入名称',
+            trigger: ['input', 'blur'],
+          }"
+        >
           <n-input v-model:value="modalForm.title" />
         </n-form-item>
 
-        <n-form-item label="描述" path="description" :rule="{
-          required: false,
-          message: '请输入描述',
-          trigger: ['input', 'blur'],
-        }">
+        <n-form-item
+          label="描述" path="description" :rule="{
+            required: false,
+            message: '请输入描述',
+            trigger: ['input', 'blur'],
+          }"
+        >
           <n-input v-model:value="modalForm.description" type="textarea" />
         </n-form-item>
-        <n-form-item label="样式类型" path="styleType" :rule="{
-          required: true,
-          type: 'number',
-          message: '请输入样式类型',
-          trigger: ['input', 'blur'],
-        }">
+        <n-form-item
+          label="样式类型" path="styleType" :rule="{
+            required: true,
+            type: 'number',
+            message: '请输入样式类型',
+            trigger: ['input', 'blur'],
+          }"
+        >
           <n-select v-model:value="modalForm.styleType" :options="styleEnum" clearable filterable tag />
         </n-form-item>
         <n-tabs v-if="modalForm.translations.length > 0" type="line" animated>
           <template v-for="(lang, index) in langs" :key="lang">
             <n-tab-pane :name="lang" :tab="langLabel[lang]" :index="index">
-              <n-form-item label="名称" path="title" :rule="{
-                required: true,
-                message: '请输入名称',
-                trigger: ['input', 'blur'],
-              }">
+              <n-form-item
+                label="名称" path="title" :rule="{
+                  required: true,
+                  message: '请输入名称',
+                  trigger: ['input', 'blur'],
+                }"
+              >
                 <n-input v-model:value="modalForm.translations.find(i => i.locale === lang).title" />
               </n-form-item>
 
-              <n-form-item label="描述" path="description" :rule="{
-                required: false,
-                message: '请输入描述',
-                trigger: ['input', 'blur'],
-              }">
-                <n-input v-model:value="modalForm.translations.find(i => i.locale === lang).description"
-                  type="textarea" />
+              <n-form-item
+                label="描述" path="description" :rule="{
+                  required: false,
+                  message: '请输入描述',
+                  trigger: ['input', 'blur'],
+                }"
+              >
+                <n-input
+                  v-model:value="modalForm.translations.find(i => i.locale === lang).description"
+                  type="textarea"
+                />
               </n-form-item>
             </n-tab-pane>
           </template>
@@ -148,7 +164,9 @@ const { modalRef, modalFormRef, modalAction, modalForm, handleAdd, handleDelete,
     doDelete: MenuApi.delete,
     doUpdate: MenuApi.update,
     initForm: {
-      enable: true, isPublish: true, translations: initTranslations({}, ['title', 'remark']).translations,
+      enable: true,
+      isPublish: true,
+      translations: initTranslations({}, ['title', 'remark']).translations,
     },
     refresh: (_, keepCurrentPage) => $table.value?.handleSearch(keepCurrentPage),
   })