feat: 调整
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
|
||||
import router from '@/router';
|
||||
import { clearToken } from '@/utils/auth';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
|
||||
/**
|
||||
* 处理业务逻辑定义的错误code
|
||||
@ -28,5 +28,5 @@ export const handleCodeError = (error: any) => {
|
||||
default:
|
||||
errMessage = error.msg || `未知错误-${error.code}`;
|
||||
}
|
||||
Message.error(errMessage);
|
||||
message.error(errMessage);
|
||||
};
|
||||
|
||||
@ -118,10 +118,10 @@ const handleError = (error) => {
|
||||
};
|
||||
|
||||
const customRequest = async (option) => {
|
||||
const { onProgress, onError, onSuccess, fileItem, name } = option;
|
||||
const { onProgress, onError, onSuccess, file, name } = option;
|
||||
try {
|
||||
// 1. 获取预签名上传URL
|
||||
const response = await fetchImageUploadFile({ suffix: getFileExtension(fileItem.file.name) });
|
||||
const response = await fetchImageUploadFile({ suffix: getFileExtension(file.name) });
|
||||
const preSignedUrl = response?.data?.upload_url;
|
||||
|
||||
if (!preSignedUrl) {
|
||||
@ -129,9 +129,9 @@ const customRequest = async (option) => {
|
||||
}
|
||||
console.log('preSignedUrl', preSignedUrl);
|
||||
// 2. 使用预签名URL上传文件
|
||||
const blob = new Blob([fileItem.file], { type: fileItem.file.type });
|
||||
const blob = new Blob([file], { type: file.type });
|
||||
await axios.put(preSignedUrl, blob, {
|
||||
headers: { 'Content-Type': fileItem.file.type },
|
||||
headers: { 'Content-Type': file.type },
|
||||
});
|
||||
|
||||
onSuccess(JSON.stringify(response));
|
||||
|
||||
@ -1,172 +0,0 @@
|
||||
/*
|
||||
* @Author: 田鑫
|
||||
* @Date: 2023-02-16 15:02:51
|
||||
* @LastEditors: 田鑫
|
||||
* @LastEditTime: 2023-03-09 11:20:59
|
||||
* @Description: table-hooks
|
||||
*/
|
||||
import type { PaginationProps, TableBorder, TableColumnData, TableData, TableRowSelection } from '@arco-design/web-vue';
|
||||
type Size = 'mini' | 'small' | 'medium' | 'large';
|
||||
interface IDefaultProps {
|
||||
/** 是否显示边框 */
|
||||
bordered?: TableBorder;
|
||||
/** 是否显示选中效果 */
|
||||
hoverable?: boolean;
|
||||
/** 表格的大小 */
|
||||
size?: Size;
|
||||
/** 是否允许调整列宽 */
|
||||
'column-resizable'?: boolean;
|
||||
/** 是否为加载中状态 */
|
||||
loading?: boolean;
|
||||
/** 分页参数 */
|
||||
pagination?: PaginationProps;
|
||||
/** table数据类型 */
|
||||
data?: any[];
|
||||
/** 表头参数 */
|
||||
columns?: TableColumnData[];
|
||||
/** 表格行 key 的取值字段 */
|
||||
'row-key'?: string;
|
||||
/** 表格的行选择器配置 */
|
||||
'row-selection'?: TableRowSelection;
|
||||
'selected-keys'?: (string | number)[];
|
||||
[x: string]: any;
|
||||
}
|
||||
interface IPagination {
|
||||
/** 当前页数 */
|
||||
current?: number;
|
||||
/** 总页数默认是0条 */
|
||||
total?: number;
|
||||
}
|
||||
interface ITableResponse<T> {
|
||||
current?: number;
|
||||
records?: T[];
|
||||
size?: number;
|
||||
total?: number;
|
||||
[x: string]: any;
|
||||
}
|
||||
type GetListFunc<T> = (v: object) => Promise<ITableResponse<T>>;
|
||||
export default function useTableProps<T>(loadListFunc: GetListFunc<T>) {
|
||||
const defaultProps: IDefaultProps = {
|
||||
bordered: { cell: true },
|
||||
size: 'large',
|
||||
'column-resizable': true,
|
||||
loading: true,
|
||||
data: [] as any[],
|
||||
pagination: {
|
||||
current: 1,
|
||||
pageSize: 20,
|
||||
total: 0,
|
||||
showPageSize: true,
|
||||
showTotal: true,
|
||||
},
|
||||
hoverable: false,
|
||||
columns: [],
|
||||
};
|
||||
//* 属性组
|
||||
const propsRes = reactive<IDefaultProps>(defaultProps);
|
||||
//* 设置请求参数,如果出了分页参数还有搜索参数,在模板页面调用此方法,可以加入参数
|
||||
const loadListParams = reactive<object>({
|
||||
page: 1,
|
||||
size: 20,
|
||||
});
|
||||
/**
|
||||
* 单独设置默认属性
|
||||
* @param params
|
||||
*/
|
||||
const setProps = (params: IDefaultProps) => {
|
||||
if (Object.keys(params).length > 0) {
|
||||
Object.assign(defaultProps, params);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* 设置表头数据
|
||||
* @param columns
|
||||
*/
|
||||
const setColumns = (columns: TableColumnData[]) => {
|
||||
propsRes.columns = columns;
|
||||
};
|
||||
/**
|
||||
* 设置loading
|
||||
* @param status
|
||||
*/
|
||||
const setLoading = (status: boolean) => {
|
||||
propsRes.loading = status;
|
||||
};
|
||||
/**
|
||||
* 设置分页
|
||||
* @param param0
|
||||
*/
|
||||
const setPagination = ({ current, total }: IPagination) => {
|
||||
propsRes.pagination!.current = current;
|
||||
total && (propsRes.pagination!.total = total);
|
||||
Object.assign(loadListParams, { page: current });
|
||||
};
|
||||
/**
|
||||
* 设置列表请求参数
|
||||
* @param params
|
||||
*/
|
||||
const setLoadListParams = <R>(params?: R) => {
|
||||
Object.assign(loadListParams, params);
|
||||
};
|
||||
/**
|
||||
* 加载列表
|
||||
* @returns
|
||||
*/
|
||||
const loadTableData = async (resetPageIndex = false) => {
|
||||
if (resetPageIndex) {
|
||||
setPagination({ current: 1 });
|
||||
}
|
||||
setLoading(true);
|
||||
try {
|
||||
const resData = await loadListFunc({
|
||||
...loadListParams,
|
||||
});
|
||||
console.log(resData);
|
||||
const response = resData as ITableResponse<T>;
|
||||
propsRes.data = response.records;
|
||||
setPagination({
|
||||
current: response.current,
|
||||
total: response.total,
|
||||
});
|
||||
setLoading(false);
|
||||
return resData;
|
||||
} catch (error) {
|
||||
setLoading(false);
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
// 事件触发组
|
||||
const propsEvent = reactive({
|
||||
// 排序触发
|
||||
sorterChange: (dataIndex: string, direction: string) => {
|
||||
console.log(dataIndex, direction);
|
||||
},
|
||||
// 分页触发
|
||||
pageChange: (current: number) => {
|
||||
setPagination({ current });
|
||||
loadTableData();
|
||||
},
|
||||
// 修改每页显示条数
|
||||
pageSizeChange: (size: number) => {
|
||||
propsRes.pagination!.pageSize = size;
|
||||
Object.assign(loadListParams, { size });
|
||||
loadTableData();
|
||||
},
|
||||
selectionChange: (rowKeys: (string | number)[]) => {
|
||||
propsRes['selected-keys'] = rowKeys;
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
propsRes,
|
||||
propsEvent,
|
||||
loadListParams,
|
||||
setProps,
|
||||
setColumns,
|
||||
setLoading,
|
||||
setPagination,
|
||||
loadTableData,
|
||||
setLoadListParams,
|
||||
};
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
* @Date: 2025-06-23 03:56:22
|
||||
*/
|
||||
import { defineStore } from 'pinia';
|
||||
import type { AppState, RouteRecordNormalized, NotificationReturn } from './types';
|
||||
import type { AppState, RouteRecordNormalized } from './types';
|
||||
|
||||
import defaultSettings from '@/config/settings.json';
|
||||
import type { AppRouteRecordRaw } from '@/router/routes/types';
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
import type { RouteRecordNormalized } from 'vue-router';
|
||||
import type { NotificationReturn } from '@arco-design/web-vue/es/notification/interface';
|
||||
import type { AppRouteRecordRaw } from '@/router/routes/types';
|
||||
|
||||
export { RouteRecordNormalized, NotificationReturn };
|
||||
export { RouteRecordNormalized };
|
||||
|
||||
export interface AppState {
|
||||
theme: string;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<script lang="jsx">
|
||||
import { Button, Input } from 'ant-design-vue';
|
||||
import { Button, Input, Image } from 'ant-design-vue';
|
||||
const { TextArea } = Input;
|
||||
import { Image, Spin, Affix } from '@arco-design/web-vue';
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
import SvgIcon from '@/components/svg-icon/index.vue';
|
||||
import DeleteCommentModal from './delete-comment-modal.vue';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<script lang="jsx">
|
||||
import { Button } from 'ant-design-vue';
|
||||
import { Spin } from '@arco-design/web-vue';
|
||||
import { Spin } from 'ant-design-vue';
|
||||
import AiSuggest from './components/ai-suggest/';
|
||||
|
||||
import { getShareWorksList, getShareWorksDetail, patchShareWorksConfirm } from '@/api/all/generationWorkshop.ts';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<script lang="jsx">
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
import { Image, Spin } from '@arco-design/web-vue';
|
||||
import { Image, Spin } from 'ant-design-vue';
|
||||
|
||||
import { exactFormatTime } from '@/utils/tools';
|
||||
import { handleUserHome } from '@/utils/user.ts';
|
||||
|
||||
@ -3,6 +3,9 @@
|
||||
.ant-drawer-mask {
|
||||
background-color: transparent;
|
||||
}
|
||||
.ant-drawer-header {
|
||||
display: none;
|
||||
}
|
||||
.ant-drawer-body {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
<script lang="jsx">
|
||||
import axios from 'axios';
|
||||
import { Swiper, SwiperSlide } from 'swiper/vue';
|
||||
import { Button, Form, Input, FormItem, Tabs, message } from 'ant-design-vue';
|
||||
import { Button, Form, Input, FormItem, Tabs, message, Image, Upload, Spin } from 'ant-design-vue';
|
||||
import { IconLoading } from '@arco-design/web-vue/es/icon';
|
||||
import { Image, Upload, Spin } from '@arco-design/web-vue';
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
import HighlightTextarea from './highlight-textarea';
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<script lang="jsx">
|
||||
import { Button, message } from 'ant-design-vue';
|
||||
import { Spin } from '@arco-design/web-vue';
|
||||
import { Spin } from 'ant-design-vue';
|
||||
import CancelCheckModal from './cancel-check-modal.vue';
|
||||
import CheckSuccessModal from './check-success-modal.vue';
|
||||
import HeaderCard from './components/header-card';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<script lang="jsx">
|
||||
import axios from 'axios';
|
||||
import { Button, Form, FormItem, Input, message } from 'ant-design-vue';
|
||||
import { Upload } from '@arco-design/web-vue';
|
||||
import { Upload } from 'ant-design-vue';
|
||||
// import CommonSelect from '@/components/common-select';
|
||||
// import { VueDraggable } from 'vue-draggable-plus';
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<script lang="jsx">
|
||||
import { Modal, Button, Form, FormItem, RadioGroup, Radio, Input, message } from 'ant-design-vue';
|
||||
import { Upload } from '@arco-design/web-vue';
|
||||
import { Modal, Button, Form, FormItem, RadioGroup, Radio, Input, message, Upload } from 'ant-design-vue';
|
||||
import { useClipboard } from '@vueuse/core';
|
||||
import { getWriterLinksGenerate, getTemplateUrl, postWorksByLink, postWorksByFile } from '@/api/all/generationWorkshop';
|
||||
import { generateFullUrl } from '@/utils/tools';
|
||||
@ -148,9 +147,7 @@ export default {
|
||||
// 文件上传处理
|
||||
const handleUpload = async (option) => {
|
||||
taskStatus.value = TASK_STATUS.LOADING;
|
||||
const {
|
||||
fileItem: { file },
|
||||
} = option;
|
||||
const { file } = option;
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<script lang="jsx">
|
||||
import { Spin } from '@arco-design/web-vue';
|
||||
import { Spin } from 'ant-design-vue';
|
||||
import { Button, message } from 'ant-design-vue';
|
||||
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
|
||||
@ -4,9 +4,8 @@
|
||||
-->
|
||||
<script lang="jsx">
|
||||
import { ref, computed } from 'vue';
|
||||
import { Button, Modal, Form, FormItem, RadioGroup, Radio, Input, message, Tooltip } from 'ant-design-vue';
|
||||
import { Button, Modal, Form, FormItem, RadioGroup, Radio, Input, message, Tooltip, Upload, Switch } from 'ant-design-vue';
|
||||
const { TextArea } = Input;
|
||||
import { Upload, Switch } from '@arco-design/web-vue';
|
||||
import AuthorizedAccountModal from '../authorized-account-modal';
|
||||
// import ImportPromptModal from '../import-prompt-modal';
|
||||
import StatusBox from '@/views/property-marketing/media-account/components/status-select/status-box.tsx';
|
||||
@ -122,10 +121,9 @@ export default {
|
||||
}
|
||||
};
|
||||
function handleUpload(option) {
|
||||
const { fileItem } = option;
|
||||
uploadStatus.value = UploadStatus.WAITING;
|
||||
file.value = fileItem.file;
|
||||
fileName.value = fileItem.name;
|
||||
file.value = option.file;
|
||||
fileName.value = option.file.name;
|
||||
}
|
||||
function removeFile() {
|
||||
fileName.value = '';
|
||||
|
||||
@ -72,7 +72,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue';
|
||||
import { Button, Tabs, Space, Pagination, Spin } from 'ant-design-vue';
|
||||
import { Button, Tabs, Space, Pagination, Spin, message as Amessage } from 'ant-design-vue';
|
||||
const { TabPane } = Tabs;
|
||||
import PlacementGuideList from './components/table-data/placementGuideList.vue';
|
||||
import listSearchForm from './components/table-data/listSearchForm.vue';
|
||||
@ -85,7 +85,6 @@ import {
|
||||
getPlacementGuideHistory,
|
||||
savePlacementGuide,
|
||||
} from '@/api/all/propertyMarketing';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
import { AiResultStatus, generatePDF } from '@/views/property-marketing/put-account/investment-guidelines/constants';
|
||||
import { uploadPdf } from '@/views/property-marketing/put-account/investment-guidelines/constants';
|
||||
|
||||
@ -180,7 +179,7 @@ const downPage = async () => {
|
||||
document.body.removeChild(link);
|
||||
exportLoading.value = false;
|
||||
} catch (error) {
|
||||
Message.error(error.message);
|
||||
Amessage.error(error.message);
|
||||
exportLoading.value = false;
|
||||
}
|
||||
};
|
||||
@ -215,7 +214,7 @@ const syncGetAiResult = async () => {
|
||||
aiResult.action_guide = data.result?.action_guide?.modules || [];
|
||||
aiResult.overview = data.result?.overview?.content_blocks[0] || [];
|
||||
} else if (data.ai_result_status === AiResultStatus.FAILED) {
|
||||
Message.error('AI分析失败');
|
||||
Amessage.error('AI分析失败');
|
||||
aiError();
|
||||
}
|
||||
saveForm.code = data?.code;
|
||||
@ -262,7 +261,7 @@ const handleSave = async () => {
|
||||
};
|
||||
const { code, message, data } = await savePlacementGuide(updatedSaveForm);
|
||||
if (code === 200) {
|
||||
Message.success(message);
|
||||
Amessage.success(message);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -3,6 +3,9 @@
|
||||
.ant-drawer-mask {
|
||||
background-color: transparent;
|
||||
}
|
||||
.ant-drawer-header {
|
||||
display: none;
|
||||
}
|
||||
.ant-drawer-body {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
|
||||
@ -7,7 +7,7 @@ const { TextArea } = Input;
|
||||
const { TabPane } = Tabs;
|
||||
|
||||
import { IconLoading, message } from '@arco-design/web-vue/es/icon';
|
||||
import { Image, Upload, Spin } from '@arco-design/web-vue';
|
||||
import { Image, Upload, Spin } from 'ant-design-vue';
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
|
||||
import 'swiper/css';
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
<script lang="jsx">
|
||||
import axios from 'axios';
|
||||
import { Button, Form, FormItem, Input, message } from 'ant-design-vue';
|
||||
import { Button, Form, FormItem, Input, message, Upload } from 'ant-design-vue';
|
||||
const { TextArea } = Input;
|
||||
import { Upload } from '@arco-design/web-vue';
|
||||
import CommonSelect from '@/components/common-select';
|
||||
import { VueDraggable } from 'vue-draggable-plus';
|
||||
import TextOverTips from '@/components/text-over-tips';
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<script lang="jsx">
|
||||
import { Modal, Button, Form, FormItem, Input, message } from 'ant-design-vue';
|
||||
import { Modal, Button, Form, FormItem, Input, message, Upload } from 'ant-design-vue';
|
||||
const { TextArea } = Input;
|
||||
import { Upload } from '@arco-design/web-vue';
|
||||
import {
|
||||
getTemplateUrlWriter,
|
||||
postWorksByLinkWriter,
|
||||
@ -122,9 +121,7 @@ export default {
|
||||
const handleUpload = async (option) => {
|
||||
taskStatus.value = TASK_STATUS.LOADING;
|
||||
|
||||
const {
|
||||
fileItem: { file },
|
||||
} = option;
|
||||
const { file } = option;
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<script lang="jsx">
|
||||
import { Button } from 'ant-design-vue';
|
||||
import { Spin } from '@arco-design/web-vue';
|
||||
import { Button, Spin } from 'ant-design-vue';
|
||||
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
import { AuditStatus } from '@/views/writer-material-center/components/finished-products/constants';
|
||||
|
||||
Reference in New Issue
Block a user