快乐的梦鱼 недель назад: 2
Родитель
Сommit
8659ca5579

+ 47 - 4
src/api/inheritor/InheritorContent.ts

@@ -26,8 +26,8 @@ export class CommonInfo<T extends DataModel> extends DataModel<T> {
   images = [] as string[];
   audio = '' as string|null;
   video = '' as string|null;
-  flag = '' as string;
-  keywords = '' as string|null;
+  flag = [] as string[];
+  keywords = [] as string[];
   tags = '' as string;
   associationId = 0 as number;
   pid = 0 as number;
@@ -192,7 +192,33 @@ export class InheritorInfo extends CommonInfo<InheritorInfo> {
     super(InheritorInfo, "传承人信息");
     this._convertTable = {
       ...this._convertTable,
-    }
+      gender: { clientSide: 'number', serverSide: 'string' },
+      level: { clientSide: 'number', serverSide: 'string' },
+      batch: { clientSide: 'number', serverSide: 'string' },
+      typicalImages: [
+        { 
+          clientSide: 'object', 
+          clientSideChildDataModel: {
+            convertTable: {},
+          }, 
+          serverSide: 'string' 
+        },
+        {
+          clientSide: 'addDefaultValue',
+          clientSideParam: {
+            defaultValue: [],
+          }
+        },
+      ],
+    };
+    this._convertKeyType = (key, direction) => {
+      if (key.endsWith('Text') || key.endsWith('_text')) {
+        return {
+          clientSide: 'string',
+          serverSide: 'undefined',
+        };
+      }
+    };
   }
 
   expandInfo = new InheritorExpandInfo();
@@ -257,9 +283,26 @@ export class SeminarInfo extends CommonInfo<SeminarInfo> {
     this.setNameMapperCase('Camel', 'Snake');
     this._convertTable = {
       ...this._convertTable,
-    }
+      lonlat: { serverSide: 'undefined' },
+    };
+    this._convertKeyType = (key, direction) => {
+      if (key.endsWith('Text') || key.endsWith('_text')) {
+        return {
+          clientSide: 'string',
+          serverSide: 'undefined',
+        };
+      }
+    };
+    this._afterSolveServer = (self) => {
+      self.lonlat = [ self.longitude, self.latitude ];
+    };
+    this._afterSolveClient = (data) => {
+      data.longitude = this.lonlat[0];
+      data.latitude = this.lonlat[1];
+    };
   }
 
+  lonlat = [] as (number|string)[];
   expandInfo = new SeminarExpandInfo();
 
   id = 0 as number;

+ 1 - 4
src/pages/forms/form.vue

@@ -107,10 +107,7 @@ async function loadData() {
   try {
     await load.value();
   } catch (error) {
-    Modal.error({
-      title: '加载失败',
-      content: '' + error,
-    });
+    message.error('加载失败 ' + error);
   } finally {
     loadingData.value = false;
   }

+ 67 - 4
src/pages/forms/inheritor.vue

@@ -36,7 +36,69 @@ const formOptions = ref<IDynamicFormOptions>({
           label: '标题', name: 'title', type: 'text',
           additionalProps: { placeholder: '请输入标题' },
         },
-        //请在这里添加表单项
+        { 
+          label: '性别', name: 'gender', type: 'select',
+          additionalProps: {
+            placeholder: '请选择性别',
+            options: [
+              { text: '女', value: 0 },
+              { text: '男', value: 1 },
+              { text: '未知', value: 2 }
+            ]
+          },
+        },
+        { 
+          label: '传承人等级', name: 'level', type: 'select-id',
+          additionalProps: {
+            placeholder: '请选择传承人等级',
+            loadData: async () => (await CommonContent.getCategoryList(2)).map(p => ({ label: p.title, value: p.id, raw: p }))
+          },
+        },
+        { 
+          label: '传承人批次', name: 'batch', type: 'select-id',
+          additionalProps: {
+            placeholder: '请选择传承人批次',
+            loadData: async () => (await CommonContent.getCategoryList(289)).map(p => ({ label: p.title, value: p.id, raw: p }))
+          },
+        },
+        { label: '别称', name: 'alsoName', type: 'text', additionalProps: { placeholder: '请输入别称' } },
+        { label: '时代', name: 'age', type: 'text', additionalProps: { placeholder: '请输入时代' } },
+        { label: '出生地', name: 'birthplace', type: 'text', additionalProps: { placeholder: '请输入出生地' } },
+        { label: '民族', name: 'nation', type: 'text', additionalProps: { placeholder: '请输入民族' } },
+        { label: '出生日期', name: 'dateBirth', type: 'text', additionalProps: { placeholder: '请选择出生日期' } },
+        { label: '逝世日期', name: 'deathBirth', type: 'text', additionalProps: { placeholder: '请选择逝世日期' } },
+        { label: '单位', name: 'unit', type: 'text', additionalProps: { placeholder: '请输入单位' } },
+        { label: '内容', name: 'content', type: 'richtext', additionalProps: { placeholder: '请输入内容' } },
+        { label: '简介', name: 'intro', type: 'richtext', additionalProps: { placeholder: '请输入简介' } },
+        { label: '奖项-成就', name: 'prize', type: 'richtext', additionalProps: { placeholder: '请输入奖项-成就' } },
+        { 
+          type: 'array-object', label: '代表性图片', name: 'typicalImages',
+          formProps: {
+            center: false,
+          },
+          additionalProps: {
+            direction: 'horizontal'
+          },
+          newChildrenObject: (arrayNow) => ({
+            desc: `代表性图片${arrayNow.length+1}`,
+            url: '',
+            from: '',
+            mobile: '',
+          }),
+          children: [
+            { type: 'text', label: '来源', name: 'from', additionalProps: { placeholder: '请输入来源' } },
+            { type: 'text', label: '联系方式', name: 'mobile', additionalProps: { placeholder: '请输入联系方式' } },
+            { type: 'text', label: '说明', name: 'desc', additionalProps: { placeholder: '请输入说明' } },
+            { 
+              label: '图片', name: 'url', type: 'single-image',
+              additionalProps: {
+                name: 'file',
+                placeholder: '请上传图片',
+                uploadCo: useImageSimpleUploadCo(),
+              } as UploadImageFormItemProps,
+            },
+          ]
+        },
       ]
     },
     {
@@ -154,7 +216,7 @@ const formOptions = ref<IDynamicFormOptions>({
       type: 'group-object', label: '扩展信息', name: 'expandInfo',
       childrenColProps: { span: 24 },
       children: [
-        
+        //在这里添加表单项目
       ]
     },
   ],
@@ -163,12 +225,13 @@ const formOptions = ref<IDynamicFormOptions>({
       protectLevel: [{ required: true, message: '请选择保护级别' }],
     },
     title: [{ required: true, message: '请输入标题' }],
-    region: [{ required: true, message: '请选择地区' }],
+    region: [{ required: true, message: '请选 择地区' }],
     type: [{ required: true, message: '请选择类型' }],
     image: [{ required: true, message: '请上传图片' }],
+    gender: [{ required: true, message: '请选择性别' }],
     level: [{ required: true, message: '请选择级别' }],
+    batch: [{ required: true, message: '请输入批次' }],
     ichType: [{ required: true, message: '请选择非遗类型' }],
-    batch: [{ required: true, message: '请输入批次' }]
   }
 });
 

+ 39 - 0
src/pages/forms/seminar.vue

@@ -36,7 +36,46 @@ const formOptions = ref<IDynamicFormOptions>({
           label: '标题', name: 'title', type: 'text',
           additionalProps: { placeholder: '请输入标题' },
         },
+        { 
+          label: '批次', name: 'batch', type: 'select-id',
+          additionalProps: {
+            placeholder: '请选择批次',
+            loadData: async () => (await CommonContent.getCategoryList(289)).map(p => ({ label: p.title, value: p.id, raw: p }))
+          },
+        },
+        { 
+          label: '传习所级别', name: 'level', type: 'select-id',
+          additionalProps: {
+            placeholder: '请选择传习所级别',
+            loadData: async () => (await CommonContent.getCategoryList(2)).map(p => ({ label: p.title, value: p.id, raw: p }))
+          },
+        },
+        { label: '内容', name: 'content', type: 'richtext', additionalProps: { placeholder: '请输入内容' } },
         
+        { label: '地图坐标', name: 'lonlat', type: 'map-pick-point' },
+        
+        {
+          type: 'simple-flat', label: '', name: 'map',
+          childrenColProps: { span: 12 },
+          children: [
+            { label: '平面坐标X', name: 'mapX', type: 'number', additionalProps: { placeholder: '请输入平面坐标X' } },
+            { label: '平面坐标Y', name: 'mapY', type: 'number', additionalProps: { placeholder: '请输入平面坐标Y' } },
+          ]
+        },
+        
+        { label: '地址', name: 'address', type: 'text', additionalProps: { placeholder: '请输入地址' } },
+        { label: '联系人', name: 'contact', type: 'text', additionalProps: { placeholder: '请输入联系人' } },
+        { label: '联系电话', name: 'mobile', type: 'text', additionalProps: { placeholder: '请输入联系电话' } },
+        { 
+          label: '非遗单位类型', name: 'ichSiteType', type: 'select',
+          additionalProps: {
+            placeholder: '请选择非遗单位类型',
+            options: [
+              { text: '传习所', value: 1 },
+              { text: '保护单位', value: 2 }
+            ]
+          },
+        },
       ]
     },
     {

+ 2 - 2
src/pages/inheritor.vue

@@ -73,8 +73,8 @@
               </a-descriptions>
             </EmptyToRecord>
           </a-tab-pane>
-          <a-tab-pane key="3" tab="传习所" @edit="router.push({ name: 'FormSeminar' })">
-            <EmptyToRecord title="传习所" :model="seminarData">
+          <a-tab-pane key="3" tab="传习所">
+            <EmptyToRecord title="传习所" :model="seminarData" @edit="router.push({ name: 'FormSeminar' })">
               <a-descriptions class="mt-3" title="传习所信息" v-if="seminarData" bordered :column="{ xs: 1, sm: 1, md: 1, lg: 2 }">
                 <a-descriptions-item label="标题"><ShowValueOrNull :value="seminarData.title" /></a-descriptions-item>
                 <a-descriptions-item label="简介" :span="3"><SimpleRichHtml :contents="[ seminarData.desc as string ]" /></a-descriptions-item>