Merge remote-tracking branch 'origin/feature/v1.2灵机空间-内容上传审核_rxd' into test
# Conflicts: # pnpm-lock.yaml # src/components/text-over-tips/index.vue # src/layouts/Basic.vue # src/main.ts # src/router/constants.ts # src/router/typeings.d.ts # src/utils/tools.ts # vite.config.ts
This commit is contained in:
18
pnpm-lock.yaml
generated
18
pnpm-lock.yaml
generated
@ -1758,8 +1758,8 @@ packages:
|
||||
copy-to@2.0.1:
|
||||
resolution: {integrity: sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==}
|
||||
|
||||
core-js@3.44.0:
|
||||
resolution: {integrity: sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==}
|
||||
core-js@3.45.0:
|
||||
resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==}
|
||||
|
||||
core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
@ -3608,11 +3608,6 @@ packages:
|
||||
resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
marked@16.1.1:
|
||||
resolution: {integrity: sha512-ij/2lXfCRT71L6u0M29tJPhP0bM5shLL3u5BePhFwPELj2blMJ6GDtD7PfJhRLhJ/c2UwrK17ySVcDzy2YHjHQ==}
|
||||
engines: {node: '>= 20'}
|
||||
hasBin: true
|
||||
|
||||
match-file@0.2.2:
|
||||
resolution: {integrity: sha512-BDEZIcrBSnooL0zC72Yt3z1HhJiCq+2pMnHKVDeYN/cilCrz3KrpqKPm4ZOfWCoDolRl4QyKQpfRlQWF6PqnjQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -7427,7 +7422,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.2
|
||||
'@types/raf': 3.4.3
|
||||
core-js: 3.44.0
|
||||
core-js: 3.45.0
|
||||
raf: 3.4.1
|
||||
regenerator-runtime: 0.13.11
|
||||
rgbcolor: 1.0.1
|
||||
@ -7649,7 +7644,7 @@ snapshots:
|
||||
|
||||
copy-to@2.0.1: {}
|
||||
|
||||
core-js@3.44.0:
|
||||
core-js@3.45.0:
|
||||
optional: true
|
||||
|
||||
core-util-is@1.0.3: {}
|
||||
@ -7881,6 +7876,7 @@ snapshots:
|
||||
dompurify@3.2.6:
|
||||
optionalDependencies:
|
||||
'@types/trusted-types': 2.0.7
|
||||
optional: true
|
||||
|
||||
domutils@1.7.0:
|
||||
dependencies:
|
||||
@ -9482,7 +9478,7 @@ snapshots:
|
||||
fflate: 0.8.2
|
||||
optionalDependencies:
|
||||
canvg: 3.0.11
|
||||
core-js: 3.44.0
|
||||
core-js: 3.45.0
|
||||
dompurify: 3.2.6
|
||||
html2canvas: 1.4.1
|
||||
|
||||
@ -9864,8 +9860,6 @@ snapshots:
|
||||
dependencies:
|
||||
object-visit: 1.0.1
|
||||
|
||||
marked@16.1.1: {}
|
||||
|
||||
match-file@0.2.2:
|
||||
dependencies:
|
||||
is-glob: 3.1.0
|
||||
|
||||
@ -51,7 +51,6 @@ const props = defineProps({
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const data = reactive({});
|
||||
const isShow = ref(false);
|
||||
const contentStyle = computed(() => {
|
||||
|
||||
@ -110,10 +110,6 @@ provide('toggleDrawerMenu', () => {
|
||||
<style scoped lang="scss">
|
||||
$layout-max-width: 1100px;
|
||||
|
||||
.layout {
|
||||
// width: 100%;
|
||||
// height: 100%;
|
||||
}
|
||||
.layout-navbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
|
||||
@ -26,4 +26,11 @@ app.component('NoData', NoData);
|
||||
app.component('SvgIcon', SvgIcon);
|
||||
(Object.keys(directives) as Array<keyof typeof directives>).forEach((k) => app.use(directives[k])); // 注册指令
|
||||
|
||||
app.use(store).use(router).mount('#app');
|
||||
app.use(store);
|
||||
app.use(router);
|
||||
|
||||
Object.values(directives).forEach((directive) => {
|
||||
app.use(directive);
|
||||
}); // 注册指令
|
||||
|
||||
app.mount('#app');
|
||||
|
||||
@ -23,10 +23,10 @@ export const DEFAULT_ROUTE = {
|
||||
|
||||
export const MENU_GROUP_IDS = {
|
||||
DATA_ENGINE_ID: 1, // 全域数据分析
|
||||
AGENT: 2, // 智能体
|
||||
AGENT: 2,
|
||||
MANAGEMENT_ID: 3, // 管理中心
|
||||
PROPERTY_ID: 4, // 资产营销平台
|
||||
WORK_BENCH_ID: 5, // 工作台
|
||||
WRITER_CREATIVE_GENERATION_WORKSHOP_ID: 6, // 内容稿件-写手侧
|
||||
CREATIVE_GENERATION_WORKSHOP_ID: 7, // 创意生成工坊
|
||||
CREATIVE_GENERATION_WORKSHOP_ID: 7 // 创意生成工坊
|
||||
};
|
||||
|
||||
2
src/router/typeings.d.ts
vendored
2
src/router/typeings.d.ts
vendored
@ -14,8 +14,8 @@ declare module 'vue-router' {
|
||||
noAffix?: boolean; // if set true, the tag will not affix in the tab-bar
|
||||
ignoreCache?: boolean; // if set true, the page will not be cached
|
||||
hideSidebar?: boolean;
|
||||
isAgentRoute?:boolean;
|
||||
hideFooter?: boolean;
|
||||
isAgentRoute?:boolean;
|
||||
requireLogin?: boolean; // 是否需要登陆才能访问
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,7 +397,7 @@ export function getImageMainColor(imageUrl: string): Promise<string> {
|
||||
const avgColor = {
|
||||
r: Math.round(maxGroup.sumR / maxGroup.count),
|
||||
g: Math.round(maxGroup.sumG / maxGroup.count),
|
||||
b: Math.round(maxGroup.sumB / maxGroup.count),
|
||||
b: Math.round(maxGroup.sumB / maxGroup.count)
|
||||
};
|
||||
|
||||
resolve(`rgb(${avgColor.r},${avgColor.g},${avgColor.b})`);
|
||||
@ -427,38 +427,28 @@ function medianCut(data: Uint8ClampedArray, levels: number): any[] {
|
||||
if (a < 128) continue;
|
||||
|
||||
colors.push({
|
||||
r,
|
||||
g,
|
||||
b,
|
||||
r, g, b,
|
||||
count: 1,
|
||||
sumR: r,
|
||||
sumG: g,
|
||||
sumB: b,
|
||||
sumR: r, sumG: g, sumB: b
|
||||
});
|
||||
}
|
||||
|
||||
// 如果没有颜色数据,返回默认白色
|
||||
if (colors.length === 0) {
|
||||
return [
|
||||
{
|
||||
return [{
|
||||
count: 1,
|
||||
sumR: 255,
|
||||
sumG: 255,
|
||||
sumB: 255,
|
||||
},
|
||||
];
|
||||
sumR: 255, sumG: 255, sumB: 255
|
||||
}];
|
||||
}
|
||||
|
||||
// 开始中位数切分
|
||||
let colorGroups = [
|
||||
{
|
||||
let colorGroups = [{
|
||||
colors,
|
||||
count: colors.length,
|
||||
sumR: colors.reduce((sum, c) => sum + c.r, 0),
|
||||
sumG: colors.reduce((sum, c) => sum + c.g, 0),
|
||||
sumB: colors.reduce((sum, c) => sum + c.b, 0),
|
||||
},
|
||||
];
|
||||
sumB: colors.reduce((sum, c) => sum + c.b, 0)
|
||||
}];
|
||||
|
||||
for (let i = 0; i < levels; i++) {
|
||||
const newGroups = [];
|
||||
@ -470,12 +460,12 @@ function medianCut(data: Uint8ClampedArray, levels: number): any[] {
|
||||
}
|
||||
|
||||
// 找出颜色范围最大的通道
|
||||
const rMin = Math.min(...group.colors.map((c) => c.r));
|
||||
const rMax = Math.max(...group.colors.map((c) => c.r));
|
||||
const gMin = Math.min(...group.colors.map((c) => c.g));
|
||||
const gMax = Math.max(...group.colors.map((c) => c.g));
|
||||
const bMin = Math.min(...group.colors.map((c) => c.b));
|
||||
const bMax = Math.max(...group.colors.map((c) => c.b));
|
||||
const rMin = Math.min(...group.colors.map(c => c.r));
|
||||
const rMax = Math.max(...group.colors.map(c => c.r));
|
||||
const gMin = Math.min(...group.colors.map(c => c.g));
|
||||
const gMax = Math.max(...group.colors.map(c => c.g));
|
||||
const bMin = Math.min(...group.colors.map(c => c.b));
|
||||
const bMax = Math.max(...group.colors.map(c => c.b));
|
||||
|
||||
const rRange = rMax - rMin;
|
||||
const gRange = gMax - gMin;
|
||||
@ -489,9 +479,15 @@ function medianCut(data: Uint8ClampedArray, levels: number): any[] {
|
||||
}
|
||||
|
||||
// 按最大范围通道排序
|
||||
type ColorChannel = 'r' | 'g' | 'b';
|
||||
const safeSortChannel = sortChannel as ColorChannel;
|
||||
group.colors.sort((a, b) => a[safeSortChannel] - b[safeSortChannel]);
|
||||
group.colors.sort((a, b) => {
|
||||
if (sortChannel === 'r') {
|
||||
return a.r - b.r;
|
||||
} else if (sortChannel === 'g') {
|
||||
return a.g - b.g;
|
||||
} else {
|
||||
return a.b - b.b;
|
||||
}
|
||||
});
|
||||
|
||||
// 切分中位数
|
||||
const mid = Math.floor(group.colors.length / 2);
|
||||
@ -504,7 +500,7 @@ function medianCut(data: Uint8ClampedArray, levels: number): any[] {
|
||||
count: group1.length,
|
||||
sumR: group1.reduce((sum, c) => sum + c.r, 0),
|
||||
sumG: group1.reduce((sum, c) => sum + c.g, 0),
|
||||
sumB: group1.reduce((sum, c) => sum + c.b, 0),
|
||||
sumB: group1.reduce((sum, c) => sum + c.b, 0)
|
||||
});
|
||||
|
||||
newGroups.push({
|
||||
@ -512,7 +508,7 @@ function medianCut(data: Uint8ClampedArray, levels: number): any[] {
|
||||
count: group2.length,
|
||||
sumR: group2.reduce((sum, c) => sum + c.r, 0),
|
||||
sumG: group2.reduce((sum, c) => sum + c.g, 0),
|
||||
sumB: group2.reduce((sum, c) => sum + c.b, 0),
|
||||
sumB: group2.reduce((sum, c) => sum + c.b, 0)
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
});
|
||||
if (code === 200) {
|
||||
taskStatus.value = TASK_STATUS.SUCCESS;
|
||||
works.value = data ? [data] : [];
|
||||
data && works.value.push(data);
|
||||
}
|
||||
};
|
||||
|
||||
@ -189,8 +189,9 @@ export default {
|
||||
<Upload
|
||||
action="/"
|
||||
draggable
|
||||
multiple
|
||||
customRequest={handleUpload}
|
||||
accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv"
|
||||
accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv,.m4v"
|
||||
show-file-list={false}
|
||||
>
|
||||
{{
|
||||
|
||||
@ -277,7 +277,7 @@ export default {
|
||||
onClick={(e) => onDelete(e, item, index)}
|
||||
/>
|
||||
<TextOverTips
|
||||
context={item.content}
|
||||
context={item.title}
|
||||
line={1}
|
||||
class={`cts !color-#211F24 mb-8px ${selectCardInfo.value.id === item.id ? 'bold' : ''}`}
|
||||
/>
|
||||
|
||||
@ -158,7 +158,7 @@ export default {
|
||||
});
|
||||
if (code === 200) {
|
||||
taskStatus.value = TASK_STATUS.SUCCESS;
|
||||
works.value = data ? [data] : [];
|
||||
data && works.value.push(data);
|
||||
}
|
||||
};
|
||||
|
||||
@ -220,8 +220,9 @@ export default {
|
||||
<Upload
|
||||
action="/"
|
||||
draggable
|
||||
multiple
|
||||
customRequest={handleUpload}
|
||||
accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv"
|
||||
accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv,.m4v"
|
||||
show-file-list={false}
|
||||
>
|
||||
{{
|
||||
|
||||
@ -278,7 +278,7 @@ export default {
|
||||
onClick={(e) => onDelete(e, item, index)}
|
||||
/>
|
||||
<TextOverTips
|
||||
context={item.content}
|
||||
context={item.title}
|
||||
line={1}
|
||||
class={`cts !color-#211F24 mb-8px ${selectCardInfo.value.id === item.id ? 'bold' : ''}`}
|
||||
/>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
class="ignore-export"
|
||||
@onReset="handleReset"
|
||||
v-model:query="query"
|
||||
@onSearch="onSearch"
|
||||
@onSearch="handleSearch"
|
||||
:disabled="loading"
|
||||
></listSearchForm>
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
@onSearch="onSearch"
|
||||
@updateQuery="handleUpdateQuery"
|
||||
/>
|
||||
<a-spin v-if="loading" tip="AI分析中" />
|
||||
|
||||
<div v-if="listData.total > 0" class="pagination-box flex justify-end ignore-export">
|
||||
<a-pagination
|
||||
@ -44,10 +45,13 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 投放建议-->
|
||||
<MonthData v-if="tabData == 'placement_guide'" :overview="aiResult.overview"></MonthData>
|
||||
|
||||
<PlacementSuggestions v-if="tabData == 'placement_guide'" :optimization="aiResult.optimization"></PlacementSuggestions>
|
||||
<PlacementSuggestions
|
||||
v-if="tabData == 'placement_guide'"
|
||||
:optimization="aiResult.optimization"
|
||||
></PlacementSuggestions>
|
||||
|
||||
<div v-if="tabData == 'placement_guide'" class="ignore-export">
|
||||
<a-space class="down-btn">
|
||||
@ -132,12 +136,9 @@ const onSearch = async () => {
|
||||
let result;
|
||||
if (tabData.value === 'placement_guide') {
|
||||
result = await getPlacementGuide(query);
|
||||
console.log(1);
|
||||
|
||||
placementGuideList.value = result?.data?.data || [];
|
||||
if (placementGuideList.value.length > 0 && isGetAi.value) {
|
||||
loading.value = true;
|
||||
syncGetAiResult();
|
||||
startTask();
|
||||
}
|
||||
} else {
|
||||
result = await getPlacementGuideHistory(query);
|
||||
guideHistoryList.value = result?.data?.data || [];
|
||||
@ -145,6 +146,16 @@ const onSearch = async () => {
|
||||
listData.total = result.data.total;
|
||||
isGetAi.value = true;
|
||||
};
|
||||
|
||||
const handleSearch = async () => {
|
||||
await onSearch();
|
||||
if (placementGuideList.value.length > 0 && isGetAi.value) {
|
||||
loading.value = true;
|
||||
syncGetAiResult();
|
||||
startTask();
|
||||
}
|
||||
};
|
||||
|
||||
const aiResult = reactive({
|
||||
optimization: [], // 投放建议优化
|
||||
action_guide: [], // 新投放建议生成
|
||||
|
||||
Reference in New Issue
Block a user