Bläddra i källkod

Merge branch 'feature/31-carousal' of 1-bright/admin into main

依力 1 år sedan
förälder
incheckning
e08155d2cc

+ 0 - 2
components.d.ts

@@ -23,7 +23,6 @@ declare module 'vue' {
     TFormItem: typeof import('tdesign-vue-next')['FormItem']
     THeader: typeof import('tdesign-vue-next')['Header']
     TIcon: typeof import('tdesign-vue-next')['Icon']
-    TImage: typeof import('tdesign-vue-next')['Image']
     TImageViewer: typeof import('tdesign-vue-next')['ImageViewer']
     TInput: typeof import('tdesign-vue-next')['Input']
     TInputNumber: typeof import('tdesign-vue-next')['InputNumber']
@@ -33,7 +32,6 @@ declare module 'vue' {
     TPopconfirm: typeof import('tdesign-vue-next')['Popconfirm']
     TRadioButton: typeof import('tdesign-vue-next')['RadioButton']
     TRadioGroup: typeof import('tdesign-vue-next')['RadioGroup']
-    TSelectInput: typeof import('tdesign-vue-next')['SelectInput']
     TSpace: typeof import('tdesign-vue-next')['Space']
     TTable: typeof import('tdesign-vue-next')['Table']
     TTag: typeof import('tdesign-vue-next')['Tag']

+ 9 - 3
src/api/carousal.ts

@@ -1,19 +1,25 @@
 import httpClient from './httpClient'
-import type { CarousalResult, CreateCarousalsRequest, SearchCarousalsFilter } from '@/model/carousals'
+import type {
+  CarousalResult, Carousals,
+  CreateCarousalsRequest,
+  SearchCarousalsFilter,
+  UpdateCarousalsRequest
+} from '@/model/carousals'
 import type { PageResult } from '@/model/base'
+import type {UnwrapRef} from "vue";
 
 export const createCarousal = (createCarousalsRequest: CreateCarousalsRequest) => {
   return httpClient.post<PageResult<CarousalResult>>('/carousals', createCarousalsRequest)
 }
 
 export const searchCarousals = (searchCarousalsFilter: SearchCarousalsFilter) => {
-  return httpClient.get<PageResult<CarousalResult>>('/carousals',searchCarousalsFilter)
+  return httpClient.get<PageResult<Carousals>>('/carousals',searchCarousalsFilter)
 }
 export const getCarousalItem = (id:string) => {
   return httpClient.get<CarousalResult>(`/carousals/${id}`)
 }
 
-export const updateCarousalItem = (id:number,updateCarousalsRequest: CreateCarousalsRequest) => {
+export const updateCarousalItem = (id: UnwrapRef<UpdateCarousalsRequest["id"]> | undefined, updateCarousalsRequest: CreateCarousalsRequest) => {
   return httpClient.put<CarousalResult>(`/carousals/${id}`,updateCarousalsRequest)
 }
 

+ 17 - 9
src/model/carousals.ts

@@ -1,17 +1,25 @@
-import type { BaseModel } from '@/model/base'
+import type { AuditBaseModel, BaseModel, Paging } from '@/model/base'
 
 export interface CreateCarousalsRequest {
-  imageUrl:string,
-  targetType:string,
-  targetUrl?:string,
-  targetId?:string
+  imageUrl:string
+  targetType:string
+  targetUrl?:string | null
+  targetId?:string | null
 }
-export interface SearchCarousalsFilter {
-  page:number,
-  size:number,
-  order?:[string]
+export interface Carousals extends AuditBaseModel,CreateCarousalsRequest {
+}
+export interface UpdateCarousalsRequest extends CreateCarousalsRequest{
+  createBy?:null
+  createdTime?:string
+  id?:string
+  updateBy?:null
+  updateTime?:string
+}
+export interface SearchCarousalsFilter extends Partial<Paging> {
+  order?:string
 }
 
 export interface CarousalResult extends BaseModel,CreateCarousalsRequest{
   status:string
 }
+

+ 25 - 42
src/pages/carousal/components/CarousalDialog.vue

@@ -27,24 +27,26 @@
 </template>
 <script lang="ts" setup>
 import { computed, ref, reactive, watch } from 'vue'
-import type { FormInstanceFunctions, FormProps } from 'tdesign-vue-next'
+import type { FormInstanceFunctions } from 'tdesign-vue-next'
 import ImageUpload from '@/components/ImageUpload.vue'
 import { createCarousal, updateCarousalItem } from '@/api/carousal'
-// Todo: 改为ts方式
-const props = defineProps<{
-  isEdit?: Boolean | null
-  headerTitle?: String | null
-  carousal: {} | number
-}>()
+import type {CreateCarousalsRequest, UpdateCarousalsRequest} from "@/model/carousals";
+const props = withDefaults(defineProps<{
+  isEdit?: boolean | null
+  headerTitle?: string | null
+  carousal: CreateCarousalsRequest
+}>(),{
+  headerTitle:''
+})
 const emit = defineEmits<{
-  success: [string]
+  success: [void]
 }>()
 const formRef = ref<FormInstanceFunctions | null>(null)
 const headerText = computed(() => `${props.isEdit ? '编辑' : '创建'}${props.headerTitle || ''}`)
 const confirmBtnText = computed(() => (props.isEdit ? '保存' : '确定'))
 const formType = computed(() => `${props.isEdit ? 'update' : 'add'}`)
 
-const carousalData = ref<FormProps['data']>({
+const carousalData = ref<UpdateCarousalsRequest>({
   imageUrl: '',
   targetType: 'article',
   targetId: '',
@@ -90,18 +92,17 @@ const typeOption = reactive([
 ])
 const handleFormTypeData = () => {
   if (carousalData.value.targetType === 'article') {
-    delete carousalData.value.targetUrl
+    carousalData.value.targetUrl = null
   } else if (carousalData.value.targetType === 'url') {
-    delete carousalData.value.targetId
+    carousalData.value.targetId = null
   }
 }
 
 watch(
   () => props.carousal,
-  (newClassify) => {
+  (newClassify: CreateCarousalsRequest) => {
     carousalData.value = Object.assign({}, newClassify)
     const carousalObj = Object.assign({},newClassify)
-    // imgUrl.value.url = carousalObj.imageUrl || ''
     imgUrl.value = { url: carousalObj.imageUrl || '' }
   },
   {
@@ -113,42 +114,24 @@ const fetchSaveCarousalData = async () => {
   /* TODO: 保存分类数据 */
   if (formRef.value) {
     const valid = await formRef.value.validate()
-    // console.log(valid,'valid')
     if (valid && typeof valid === 'boolean') {
       /* TODO: 校验通过保存分类数据 */
       handleFormTypeData()
-      // console.log(formType.value,'formType')
-      let res
-
-      switch (formType.value){
-        case 'create':
-          res = await createCarousal(carousalData.value)
-          emit('success')
-          break;
-        case 'update':
-          const fieldsToKeep = ["imageUrl", "targetType", "targetUrl", "targetId"];
-          const requestObj = {};
-
-          for (const field of fieldsToKeep) {
-            if (carousalData.value[field]!== null && carousalData.value[field]!== undefined) {
-              requestObj[field] = carousalData.value[field];
-            }
-          }
-          handleFormTypeData()
-          res = await updateCarousalItem(carousalData.value.id,requestObj)
-          emit('success')
-          break;
-        default:
-          res = await createCarousal(carousalData.value)
-          emit('success')
-          break;
-      }
-      // const createCarousalApi = createCarousal(carousalData.value)
-      // console.log(createCarousalApi,'createCarousalApi')
+      formType.value === 'add' ? await createCarousalData() : await updateCarousalData()
       return
     }
   }
 }
+const createCarousalData = async () => {
+  await createCarousal(carousalData.value)
+  emit('success')
+}
+const updateCarousalData = async () => {
+  handleFormTypeData()
+  const requestObj: CreateCarousalsRequest = {imageUrl: carousalData.value.imageUrl,targetType:carousalData.value.targetType,targetUrl:carousalData.value.targetUrl,targetId:carousalData.value.targetId}
+  await updateCarousalItem(carousalData.value.id, requestObj)
+  emit('success')
+}
 const handleCloseDialog = () => {
   // 数据&&规则校验结果重置
   if (formRef.value) {

+ 17 - 7
src/pages/carousal/index.vue

@@ -4,7 +4,11 @@ import { onMounted,  ref } from 'vue'
 import type { BaseTableColumns } from 'tdesign-vue-next'
 import CarousalDialog from '@/pages/carousal/components/CarousalDialog.vue'
 import { activeCarousal, deleteCarousal, searchCarousals, inactiveCarousal } from '@/api/carousal'
-import type { CarousalResult, SearchCarousalsFilter } from '@/model/carousals'
+import type {
+  CarousalResult, Carousals,
+  CreateCarousalsRequest,
+  SearchCarousalsFilter,
+} from '@/model/carousals'
 import ImagePreviewer from '@/components/ImagePreviewer.vue'
 import { useSearchable } from '@/composables/useSearchable'
 
@@ -31,16 +35,17 @@ const columns: BaseTableColumns = [
   }
 ]
 
-const { loading, data, pagination, fetchData, onPageChange } = useSearchable<CarousalResult, SearchCarousalsFilter>(searchCarousals)
+const { loading, data, pagination, fetchData, onPageChange } = useSearchable<SearchCarousalsFilter,Carousals>(searchCarousals)
 onMounted(fetchData)
 
 
 const carousalDialogVisible = ref<boolean>(false)
 const isEdit = ref<boolean>(false)
-const currentTableData = ref<CarousalResult | null>(null)
-
-
-const handleEdit = (row: object): void => {
+const currentTableData = ref<CreateCarousalsRequest>({
+  imageUrl: '',
+  targetType: ''
+})
+const handleEdit = (row: CarousalResult): void => {
   isEdit.value = true
   currentTableData.value = Object.assign({}, row)
   carousalDialogVisible.value = true
@@ -60,7 +65,12 @@ const handleDelete = async (row: CarousalResult): Promise<void> => {
 const handleCreateCarousal = (): void => {
   isEdit.value = false
   carousalDialogVisible.value = true
-  currentTableData.value = {}
+  currentTableData.value = {
+    imageUrl: '',
+    targetId: '',
+    targetType: '',
+    targetUrl: '',
+  }
 }
 const handleSuccessDialog = async (): Promise<void> => {
   await fetchData()

+ 1 - 1
vite.config.ts

@@ -44,7 +44,7 @@ export default defineConfig(({ command, mode }) => {
         '/api': {
           target: env.VITE_PROXY_ENDPOINT,
           changeOrigin: true,
-          // rewrite: (path) => path.replace(/^\/api/, '')
+          rewrite: (path) => path.replace(/^\/api/, '')
         }
       }
     }