瀏覽代碼

feat(组件): 修改bug

tangning 2 年之前
父節點
當前提交
b6f1f72ba7

+ 45 - 7
src/api/operate/index.ts

@@ -49,15 +49,11 @@ enum Api {
   sceneApplyHandle = '/service/manage/sceneApply/handle',
   getInfoMail = '/service/manage/getInfo',
   updateMail = '/service/manage/update',
-  caseClassList='/service/manage/caseClass/list',
-  allList='/service/manage/caseClass/allList',
-  addcaseOrUpdate='/service/manage/caseClass/addOrUpdate',
-  caseClassDel='/service/manage/caseClass/del',
-  caseIconList='/service/manage/caseIcon/list',
-  addCaseIconOrUpdate='/service/manage/caseIcon/addOrUpdate',
-  caseIconDel='/service/manage/caseIcon/del',
+  caseaddOrUpdate='/service/manage/case/addOrUpdate',
   caseList = '/service/manage/case/list',
   caseDel='/service/manage/case/del',
+  caseRelease='/service/manage/case/release',
+  caseWithdraw='/service/manage/case/withdraw',
 }
 
 /**
@@ -125,6 +121,48 @@ enum Api {
      ignoreCancelToken: true,
    },
  });
+ 
+ export const caseaddOrUpdateApi = (params: PageParams) =>
+ defHttp.post<RentListGetResultModel>({
+   url: Api.caseaddOrUpdate,
+   params: params,
+   // data: params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
+  
+ export const casePublicApi = (params: PageParams) =>
+ defHttp.post<RentListGetResultModel>({
+   url: Api.caseWithdraw,
+   params: params,
+   // data: params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
+ export const caseReleaseApi = (params: PageParams) =>
+ defHttp.post<RentListGetResultModel>({
+   url: Api.caseRelease,
+   params: params,
+   // data: params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
+ export const caseDelApi = (params: PageParams) =>
+ defHttp.post<RentListGetResultModel>({
+   url: Api.caseDel,
+   params: params,
+   // data: params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
  export const ListApi = (params: PageParams) =>
  defHttp.post<RentListGetResultModel>({
    url: Api.pageList,

+ 1 - 1
src/settings/projectSetting.ts

@@ -161,7 +161,7 @@ const setting: ProjectConfig = {
   showBreadCrumbIcon: false,
 
   // Use error-handler-plugin
-  useErrorHandle: true,
+  useErrorHandle: false,
 
   // Whether to open back to top
   useOpenBackTop: true,

+ 3 - 3
src/views/customer/modal/InfoModal.vue

@@ -116,7 +116,7 @@
         {
           field: 'topLogo',
           component: 'Upload',
-          label: '顶部LOGO',
+          label: '加载LOGO',
           helpMessage:'进入场景时显示的LOGO',
           defaultValue: null,
           componentProps: {
@@ -176,7 +176,7 @@
         {
           field: 'showLogo',
           component: 'RadioGroup',
-          label: '初始LOGO',
+          label: '移动端品牌LOGO',
           helpMessage:'四维时代提供技术支持',
           defaultValue: 1,
           componentProps: {
@@ -197,7 +197,7 @@
         },
       ];
       const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
-        labelWidth: 120,
+        labelWidth: 150,
         schemas,
         showActionButtonGroup: false,
         actionColOptions: {

+ 45 - 36
src/views/operate/caseList.vue

@@ -65,7 +65,7 @@ import {
 } from '/@/components/Table';
 import { PageWrapper } from '/@/components/Page';
 import { Time } from '/@/components/Time';
-import { ListApi, NewDisplay, NewPutTop, NewPublicNews, newDelete } from '/@/api/operate';
+import { caseListApi, NewDisplay, casePublicApi, caseDelApi } from '/@/api/operate';
 import {  Descriptions, Switch, Tabs } from 'ant-design-vue';
 import { useModal } from '/@/components/Modal';
 import { useI18n } from '/@/hooks/web/useI18n';
@@ -178,38 +178,13 @@ export default defineComponent({
           });
         },
       },
-      {
-        title: '置顶',
-        dataIndex: 'isTop',
-        width: 80,
-        customRender: ({ record }) => {
-          if (!Reflect.has(record, 'pendingStatus')) {
-            record.pendingStatus = false;
-          }
-          return h(Switch, {
-            checked: record.isTop === 1,
-            checkedChildren: '是',
-            unCheckedChildren: '否',
-            loading: false,
-            onChange: async (checked: boolean) => {
-              record.pendingStatus = true;
-              const id: string = record.id || '';
-              const newStatus = checked ? 1 : 0;
-              // Reflect.set(record, 'isOnSale', newStatus);
-              await NewPutTop({ id, isTop: newStatus });
-              createMessage.success(t('common.optSuccess'));
-              reload();
-            },
-          });
-        },
-      },
     ];
     const searchForm: Partial<FormProps> = {
       labelWidth: 100,
       autoSubmitOnEnter: true,
       schemas: [
         {
-          field: 'ctivated',
+          field: 'publicTime',
           label: t('routes.operate.releaseTime'),
           component: 'RangePicker',
           componentProps: {
@@ -219,23 +194,57 @@ export default defineComponent({
             showTime: true,
           },
           colProps: {
-            xl: 11,
-            xxl: 11,
+            xl: 8,
+            xxl: 8,
           },
         },
         {
           field: 'title',
-          label: t('routes.operate.newsTitle'),
+          label: '案例标题',
           component: 'Input',
           colProps: {
-            xl: 6,
-            xxl: 6,
+            xl: 5,
+            xxl: 5,
+          },
+        },
+        {
+          field: 'typeId',
+          label: '类型',
+          component: 'Select',
+          componentProps: {
+          placeholder: '请选择类型',
+          options: [
+            {
+              label: '智慧城市',
+              value: 'smartCity',
+              key: 'smartCity',
+            },
+            {
+              label: '博物馆',
+              value: 'museum',
+              key: 'museum',
+            },
+            {
+              label: '刑侦消防',
+              value: 'government',
+              key: 'government',
+            },
+            {
+              label: '房产营销',
+              value: 'property',
+              key: 'property',
+            },
+          ],
+        },
+          colProps: {
+            xl: 5,
+            xxl: 5,
           },
         },
       ],
     };
     const [registerTable, { reload }] = useTable({
-      api: ListApi,
+      api: caseListApi,
       title: '案例列表',
       columns: columns,
       useSearchForm: true,
@@ -266,13 +275,13 @@ export default defineComponent({
       canResize: true,
     });
     async function handleDelete(record: Recordable) {
-      await newDelete({ id: record.id });
+      await caseDelApi({ id: record.id });
       createMessage.success(t('common.optSuccess'));
       reload();
     }
     async function handlePublish(record: Recordable) {
       console.log('点击了发布', record);
-      await NewPublicNews({ id: record.id, isPublic: 1 });
+      await casePublicApi({ id: record.id, isPublic: 1 });
       createMessage.success(t('common.optSuccess'));
       reload();
     }
@@ -281,7 +290,7 @@ export default defineComponent({
       openModal(true, {...record,language});
     }
     async function handleWithdraw(record: Recordable) {
-      await NewPublicNews({ id: record.id, isPublic: 0 });
+      await casePublicApi({ id: record.id, isPublic: 0 });
       createMessage.success(t('common.optSuccess'));
       reload();
     }

+ 269 - 220
src/views/operate/components/case/addModal.vue

@@ -3,174 +3,224 @@
     v-bind="$attrs"
     @register="register"
     :title="title"
-    :width="1000"
+    :width="800"
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
     @ok="handleSubmit"
   >
     <div class="pt-2px pr-3px">
-      <BasicForm @register="registerForm" :model="model" >
+      <BasicForm @register="registerForm" :model="model">
         <template #text="{ model, field }">
-          {{ model[field]  }}
+          {{ model[field] }}
         </template>
       </BasicForm>
     </div>
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, nextTick, onMounted, reactive, h } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { uploadApi } from '/@/api/product/index';
-  import { newAddNews, NewsDetail, newUpdateNews } from '/@/api/operate'
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { Tinymce } from '/@/components/Tinymce/index';
+import { defineComponent, ref, nextTick, onMounted, reactive, h } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+import { useMessage } from '/@/hooks/web/useMessage';
+import { uploadApi } from '/@/api/product/index';
+import { caseaddOrUpdateApi } from '/@/api/operate';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { Tinymce } from '/@/components/Tinymce/index';
 
-  const { t } = useI18n();
-  export default defineComponent({
-    components: { BasicModal, BasicForm },
-    props: {
-      userData: { type: Object },
-    },
-    emits: ['update', 'register'],
-    setup(props, { emit }) {
-      const modelRef = ref({});
-      const title = ref('新增案例');
-      const fileFlow = reactive({
-        coverImageUrl:''
-      })
-      const { createMessage } = useMessage();
-      const schemas: FormSchema[] = [
-        {
-          field: 'id',
-          component: 'Input',
-          show:false,
-          label: 'id',
-          required: false,
-        },{
-          field: 'language',
-          component: 'Input',
-          show:false,
-          label: 'language',
-          defaultValue:'cn',
-          required: false,
-        },{
-            field: 'title',
-            component: 'Input',
-            required: true,
-            label: '标题',
-            componentProps: {
-              maxlength: 50,
-            },
-            colProps: {
-              span: 22,
-            },
-        },{
-            field: 'noteContent',
-            component: 'InputTextArea',
-            // required: true,
-            label: '摘要',
-            componentProps: {
-              maxLength: 500,
-              rows:4,
-              placeholder: '请输入职位要求',
+const { t } = useI18n();
+export default defineComponent({
+  components: { BasicModal, BasicForm },
+  props: {
+    userData: { type: Object },
+  },
+  emits: ['update', 'register'],
+  setup(props, { emit }) {
+    const modelRef = ref({});
+    const title = ref('新增案例');
+    const fileFlow = reactive({
+      coverImageUrl: '',
+    });
+    const { createMessage } = useMessage();
+    const schemas: FormSchema[] = [
+      {
+        field: 'id',
+        component: 'Input',
+        show: false,
+        label: 'id',
+        required: false,
+      },
+      {
+        field: 'language',
+        component: 'Input',
+        show: false,
+        label: 'language',
+        defaultValue: 'cn',
+        required: false,
+      },
+      {
+        field: 'title',
+        component: 'Input',
+        required: true,
+        label: '标题',
+        componentProps: {
+          maxlength: 50,
+        },
+        colProps: {
+          span: 22,
+        },
+      },
+      {
+        field: 'subTitle',
+        component: 'InputTextArea',
+        required: true,
+        label: '摘要',
+        componentProps: {
+          maxLength: 500,
+          rows: 4,
+          placeholder: '请输入摘要',
+        },
+        colProps: {
+          span: 22,
+        },
+      },
+      {
+        field: 'typeId',
+        component: 'Select',
+        required: true,
+        label: '类型',
+        componentProps: {
+          placeholder: '请选择类型',
+          options: [
+            {
+              label: '智慧城市',
+              value: 'smartCity',
+              key: 'smartCity',
             },
-            colProps: {
-              span: 22,
+            {
+              label: '博物馆',
+              value: 'museum',
+              key: 'museum',
             },
-        },{
-            field: 'source',
-            component: 'Input',
-            label: '案例来源',
-            required: true,
-            componentProps: {
-              maxlength: 15,
+            {
+              label: '刑侦消防',
+              value: 'government',
+              key: 'government',
             },
-            colProps: {
-              span: 22,
+            {
+              label: '房产营销',
+              value: 'property',
+              key: 'property',
             },
+          ],
         },
-        {
-          field: 'coverImageUrl',
-          component: 'Upload',
-          label: '封面',
-          required: true,
-          rules: [{ required: true, message: t('common.uploadMessge') }],
-          // helpMessage: t('routes.corporation.uploadHelp'),
-          itemProps: {
-            validateTrigger: 'onBlur',
-          },
-          componentProps: {
-            api: uploadApi,
-            maxNumber: 1,
-            maxSize: 1,
-            accept: ['jpg','jpeg','png'],
-            afterFetch: function (data) {
-              console.log('uploadApi',data)
-              fileFlow.coverImageUrl = data.url
-              return data;
-            },
+        colProps: {
+          span: 12,
+        },
+      },
+      {
+        field: 'coverImageUrl',
+        component: 'Upload',
+        label: '封面',
+        required: true,
+        rules: [{ required: true, message: t('common.uploadMessge') }],
+        // helpMessage: t('routes.corporation.uploadHelp'),
+        itemProps: {
+          validateTrigger: 'onBlur',
+        },
+        componentProps: {
+          api: uploadApi,
+          maxNumber: 1,
+          maxSize: 1,
+          accept: ['jpg', 'jpeg', 'png'],
+          afterFetch: function (data) {
+            console.log('uploadApi', data);
+            fileFlow.coverImageUrl = data.url;
+            return data;
           },
+        },
 
-          colProps: {
-            span: 22,
-          },
+        colProps: {
+          span: 22,
         },
-        {
-          field: 'LOGO',
-          component: 'Upload',
-          label: 'LOGO',
-          required: true,
-          rules: [{ required: true, message: t('common.uploadMessge') }],
-          // helpMessage: t('routes.corporation.uploadHelp'),
-          itemProps: {
-            validateTrigger: 'onBlur',
-          },
-          componentProps: {
-            api: uploadApi,
-            maxNumber: 1,
-            maxSize: 1,
-            accept: ['jpg','jpeg','png'],
-            afterFetch: function (data) {
-              console.log('uploadApi',data)
-              fileFlow.coverImageUrl = data.url
-              return data;
-            },
+      },
+      {
+        field: 'logo',
+        component: 'Upload',
+        label: 'LOGO',
+        required: true,
+        rules: [{ required: true, message: t('common.uploadMessge') }],
+        // helpMessage: t('routes.corporation.uploadHelp'),
+        itemProps: {
+          validateTrigger: 'onBlur',
+        },
+        componentProps: {
+          api: uploadApi,
+          maxNumber: 1,
+          maxSize: 1,
+          accept: ['jpg', 'jpeg', 'png'],
+          afterFetch: function (data) {
+            console.log('uploadApi', data);
+            fileFlow.coverImageUrl = data.url;
+            return data;
           },
+        },
 
-          colProps: {
-            span: 22,
-          },
+        colProps: {
+          span: 22,
         },
-        {
-          field: 'newType',
-          label: '类型',
-          component: 'RadioButtonGroup',
-          required: true,
-          defaultValue: 2,
-          componentProps: {
-            onChange: NewTypeChange,
-            options: [
-              { label: '链接', value: 1 },
-              { label: '图文', value: 2 },
-            ],
-          },
-        },{
-            field: 'newsUrl',
-            component: 'Input',
-            label: '图标',
-            // ifShow:false,
-            required: true,
-            colProps: {
-              span: 22,
+      },
+      {
+        field: 'iconIdList',
+        component: 'Select',
+        required: true,
+        label: '图标',
+        componentProps: {
+          placeholder: '请选择icon图标',
+          mode:'multiple',
+          options: [
+            {
+              label: '四维看看',
+              value: 1,
+              key: '1',
+            },
+            {
+              label: '四维看见',
+              value: 2,
+              key: '2',
+            },
+            {
+              label: '四维深时',
+              value: 3,
+              key: '3',
             },
-            componentProps: {
-              maxlength: 200,
+            {
+              label: '无人机航拍',
+              value: 11,
+              key: '11',
             },
+            {
+              label: '四维时代',
+              value: 5,
+              key: '5',
+            },
+          ],
+        },
+        colProps: {
+          span: 22,
+        },
+      },{
+        field: 'sort',
+        component: 'InputNumber',
+        label: '排序',
+        required: true,
+        componentProps: {
+          min:1,
         },
-        {
-          field: 'content',
+        colProps: {
+          span: 22,
+        },
+      },{
+          field: 'detailContent',
           label: '正文',
           component: 'Input',
           required: true,
@@ -188,86 +238,85 @@
             });
           },
         },
-      ];
-      const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
-        labelWidth: 120,
-        schemas,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-      onMounted(() => {});
-      let addListFunc = () => {};
-      const [register, { closeModal }] = useModalInner((data) => {
-        data && onDataReceive(data);
-      });
-      async function onDataReceive(data) {
-        modelRef.value = data
-        resetFields();
-        if(data.newType){
-          NewTypeChange(data.newType)
-        }
-        if(data.id){
-          title.value = '编辑案例'
-          const detail = await NewsDetail({id:data.id})
-          setFieldsValue({
-            ...detail,
-            newsUrl:detail.newType == 1?detail.content:'',
-            content:detail.newType != 1?detail.content:'',
-            coverImageUrl:detail.coverImageUrl?[detail.coverImageUrl]:''
-          });
-        }else{
-          title.value = '新增案例'
-          setFieldsValue({
-            content:'',
-            ...data,
-          });
-        }
+    ];
+    const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
+      labelWidth: 120,
+      schemas,
+      showActionButtonGroup: false,
+      actionColOptions: {
+        span: 24,
+      },
+    });
+    onMounted(() => {});
+    let addListFunc = () => {};
+    const [register, { closeModal }] = useModalInner((data) => {
+      data && onDataReceive(data);
+    });
+    async function onDataReceive(data) {
+      modelRef.value = data;
+      resetFields();
+      if (data.newType) {
+        NewTypeChange(data.newType);
       }
-      function NewTypeChange(val){
-        console.log('NewTypeChange',val)
-        updateSchema([
-          { field: 'content', ifShow:val == 2,},
-          { field: 'newsUrl', ifShow:val != 2,},
-        ])
-      } 
-      const handleSubmit = async () => {
-        const params = await validate();
-        let apiUrl = title.value == '新增案例'?newAddNews:newUpdateNews
-        console.log('validate',params)
-        const apiData = {
-          ...params as any,
-          coverImageUrl:params.coverImageUrl && params.coverImageUrl[0],
-          content:params.newType == 1?params.newsUrl:params.content
-        }
-        try {
-          await apiUrl(apiData);
-          closeModal();
-          resetFields();
-          createMessage.success(t('common.optSuccess'));
-          emit('update');
-        } catch (error) {
-          console.log('not passing', error);
-        }
-      };
-      function handleVisibleChange(v) {
-        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      if (data.id) {
+        title.value = '编辑案例';
+        const detail = data;
+        setFieldsValue({
+          ...detail,
+          newsUrl: detail.newType == 1 ? detail.content : '',
+          content: detail.newType != 1 ? detail.content : '',
+          coverImageUrl: detail.coverImageUrl ? [detail.coverImageUrl] : '',
+          logo: detail.logo ? [detail.logo] : '',
+        });
+      } else {
+        title.value = '新增案例';
+        setFieldsValue({
+          content: '',
+          ...data,
+        });
       }
-      return {
-        register,
-        schemas,
-        registerForm,
-        model: modelRef,
-        fileFlow,
-        NewTypeChange,
-        handleVisibleChange,
-        handleSubmit,
-        addListFunc,
-        resetFields,
-        title,
-        t,
+    }
+    function NewTypeChange(val) {
+      console.log('NewTypeChange', val);
+      updateSchema([
+        { field: 'content', ifShow: val == 2 },
+        { field: 'newsUrl', ifShow: val != 2 },
+      ]);
+    }
+    const handleSubmit = async () => {
+      const params = await validate();
+      const apiData = {
+        ...(params as any),
+        coverImageUrl: params.coverImageUrl && params.coverImageUrl[0],
+        logo: params.logo && params.logo[0],
       };
-    },
-  });
+      try {
+        await caseaddOrUpdateApi(apiData);
+        closeModal();
+        resetFields();
+        createMessage.success(t('common.optSuccess'));
+        emit('update');
+      } catch (error) {
+        console.log('not passing', error);
+      }
+    };
+    function handleVisibleChange(v) {
+      v && props.userData && nextTick(() => onDataReceive(props.userData));
+    }
+    return {
+      register,
+      schemas,
+      registerForm,
+      model: modelRef,
+      fileFlow,
+      NewTypeChange,
+      handleVisibleChange,
+      handleSubmit,
+      addListFunc,
+      resetFields,
+      title,
+      t,
+    };
+  },
+});
 </script>

+ 1 - 0
src/views/product/firmware/EditModal.vue

@@ -228,6 +228,7 @@
           const apiData = {
             // ...modelRef.value,
             ...params as any,
+            
           }
           console.log('res', apiData);
           const res = await EditAndUpload(apiData);

+ 4 - 4
src/views/product/firmware/index.vue

@@ -2,9 +2,9 @@
   <PageWrapper contentBackground>
     <template #footer>
       <a-tabs v-model:activeKey="searchInfo.type" @change="tabChange">
-        <a-tab-pane key="1" :tab="t('routes.product.type.1')" />
-        <a-tab-pane key="2" :tab="t('routes.product.type.2')" />
-        <a-tab-pane key="3" :tab="t('routes.product.type.3')" />
+        <a-tab-pane :key="1" :tab="t('routes.product.type.1')" />
+        <a-tab-pane :key="2" :tab="t('routes.product.type.2')" />
+        <a-tab-pane :key="3" :tab="t('routes.product.type.3')" />
       </a-tabs>
     </template>
     <div class="desc-wrap-BasicTable">
@@ -84,7 +84,7 @@ export default defineComponent({
     const permissionStore = usePermissionStore();
     const { getCheckPerm } = permissionStore;
     const searchInfo = reactive<Recordable>({
-      type: '1',
+      type: 1,
     });
     const [registerAddModal, { openModal: openAddModal }] = useModal();
     const [registerEditModal, { openModal: openEditModal }] = useModal();