merge
This commit is contained in:
9
src/api/system/lyricUser.ts
Normal file
9
src/api/system/lyricUser.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { post } from '@/api/request';
|
||||
|
||||
const env = import.meta.env;
|
||||
const PREFIX = env.VITE_API_PREFIX_SYSTEM;
|
||||
|
||||
// 同步利元亨的工种
|
||||
export const syncLyricUsersApi = () => {
|
||||
return post(`${PREFIX}lyricUser/syncLyricUsers`);
|
||||
};
|
||||
@@ -97,3 +97,7 @@ export const getSimulationPoolTaskApi = (params: {
|
||||
}) => {
|
||||
return get(`${PREFIX}taskpool/getSimulationPoolTask`, params);
|
||||
};
|
||||
|
||||
export const updateTaskPoolBriefApi = (params: any) => {
|
||||
return post(`${PREFIX}taskpool/updateTaskPoolBrief`, params);
|
||||
};
|
||||
|
||||
@@ -770,11 +770,23 @@ const createTaskPoolFun = async (formData: any) => {
|
||||
const wrappedNodes = wrapWithVirtualNodeFun(nodes);
|
||||
const pickedNodes = transformTreeToPoolNodes(wrappedNodes);
|
||||
|
||||
const poolBrief = {
|
||||
poolName: currentPoolBrief.value.poolName,
|
||||
tenantId: currentPoolBrief.value.tenantId,
|
||||
};
|
||||
|
||||
Object.keys(currentPoolBrief.value).forEach((key) => {
|
||||
if (key !== 'poolName' && key !== 'tenantId' && key !== 'versions') {
|
||||
poolBrief[key] = currentPoolBrief.value[key];
|
||||
}
|
||||
});
|
||||
|
||||
if (formData.poolBriefData) {
|
||||
Object.assign(poolBrief, formData.poolBriefData);
|
||||
}
|
||||
|
||||
const req = {
|
||||
poolBrief: {
|
||||
poolName: currentPoolBrief.value.poolName,
|
||||
tenantId: currentPoolBrief.value.tenantId,
|
||||
},
|
||||
poolBrief,
|
||||
nodes: pickedNodes,
|
||||
bApprove: formData.bApprove,
|
||||
approveTemplateId: formData.approveTemplateId,
|
||||
|
||||
@@ -145,6 +145,7 @@ export const poolNodePropPickMap = {
|
||||
'days',
|
||||
'flowTemplate',
|
||||
'standard',
|
||||
'exceptionFile',
|
||||
'reportTemplate',
|
||||
'analyseTarget',
|
||||
'confidence',
|
||||
|
||||
@@ -5,33 +5,40 @@
|
||||
show-cancel-button
|
||||
show-confirm-button
|
||||
:confirm-closable="false"
|
||||
:diaTitle="mode === 'add' ? $t('知识库.新增') : $t('知识库.编辑')"
|
||||
:diaTitle="mode === 'add' ? $t('通用.新增') : $t('通用.编辑')"
|
||||
:width="500"
|
||||
>
|
||||
<template #default>
|
||||
<el-form ref="formRef" :rules="rules" :model="form" labelWidth="80">
|
||||
<el-form-item :label="$t('知识库.名称')" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<TableForm
|
||||
ref="tableFormRef"
|
||||
:tableName="TABLE_NAME.TASK_POOL_CARD_LIST"
|
||||
v-model:data="formData"
|
||||
:formAttrs="{ poolName: { disabled: mode === 'edit' } }"
|
||||
/>
|
||||
</template>
|
||||
<template #footer>
|
||||
<div>
|
||||
<el-button @click="onCancelFun">{{ $t('通用.取消') }}</el-button>
|
||||
<el-button type="primary" @click="onConfirmFun">{{ $t('通用.确定') }}</el-button>
|
||||
<el-button type="primary" :loading="loading" @click="onConfirmFun">
|
||||
{{ $t('通用.确定') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, computed, reactive, watchEffect, watch } from 'vue';
|
||||
import { ref, computed, watch } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import Dialog from '@/components/common/dialog/index.vue';
|
||||
import type { FormInstance, FormRules } from 'element-plus';
|
||||
import TableForm from '@/components/common/table/tableForm.vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { TABLE_NAME } from '@/utils/enum/tableName';
|
||||
import { updateTaskPoolBriefApi } from '@/api/task/taskpool';
|
||||
import type { Pool } from './types';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
interface Props {
|
||||
modelValue: boolean;
|
||||
detail: any;
|
||||
@@ -47,78 +54,70 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
});
|
||||
|
||||
const emits = defineEmits(['update:modelValue', 'confirm']);
|
||||
const form = ref({
|
||||
name: '',
|
||||
});
|
||||
|
||||
const visible = computed({
|
||||
get: () => props.modelValue,
|
||||
set: (val) => emits('update:modelValue', val),
|
||||
});
|
||||
watchEffect(() => {
|
||||
if (props.detail && props.mode === 'edit') {
|
||||
form.value.name = props.detail.originalName;
|
||||
} else {
|
||||
form.value.name = '';
|
||||
}
|
||||
});
|
||||
|
||||
const tableFormRef = ref();
|
||||
const formData = ref<any>({});
|
||||
const loading = ref(false);
|
||||
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(val) => {
|
||||
if (val) {
|
||||
resetFun();
|
||||
if (props.detail && props.mode === 'edit') {
|
||||
form.value.name = props.detail.originalName;
|
||||
if (props.mode === 'edit' && props.detail) {
|
||||
formData.value = { ...props.detail };
|
||||
} else {
|
||||
form.value.name = '';
|
||||
formData.value = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const resetFun = () => {
|
||||
if (!formRef.value) {
|
||||
return;
|
||||
}
|
||||
formRef.value.resetFields();
|
||||
};
|
||||
const formRef = ref<FormInstance>();
|
||||
interface RuleForm {
|
||||
name: string;
|
||||
}
|
||||
const rules = reactive<FormRules<RuleForm>>({
|
||||
name: [
|
||||
{ required: true, message: t('知识库.请输入名称'), trigger: 'blur' },
|
||||
{
|
||||
validator: (rule: any, value: any, callback: any) => {
|
||||
if (props.poolList && props.poolList.length > 0) {
|
||||
const isExist = props.poolList.some((item: Pool) => item.poolName === value);
|
||||
if (isExist) {
|
||||
callback(new Error('名称已存在'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
});
|
||||
const onCancelFun = () => {
|
||||
visible.value = false;
|
||||
};
|
||||
|
||||
const onConfirmFun = async () => {
|
||||
if (!formRef.value) {
|
||||
if (!tableFormRef.value) {
|
||||
return;
|
||||
}
|
||||
await formRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
emits('confirm', form.value);
|
||||
|
||||
const valid = await tableFormRef.value.validateFun();
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const formValues = formData.value;
|
||||
|
||||
if (props.mode === 'add' && props.poolList && props.poolList.length > 0) {
|
||||
const isExist = props.poolList.some((item: Pool) => item.poolName === formValues.poolName);
|
||||
if (isExist) {
|
||||
ElMessage.warning('名称已存在');
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (props.mode === 'edit') {
|
||||
loading.value = true;
|
||||
try {
|
||||
const res: any = await updateTaskPoolBriefApi(formValues);
|
||||
if (res && res.code === 200) {
|
||||
ElMessage.success(res.message || t('通用.操作成功'));
|
||||
emits('confirm', formValues);
|
||||
visible.value = false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('更新工况库失败', error);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
} else {
|
||||
emits('confirm', formValues);
|
||||
visible.value = false;
|
||||
}
|
||||
};
|
||||
onMounted(async () => {});
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<template>
|
||||
<div class="pool-card" @click="cardClickFun">
|
||||
<img class="cover-img" :src="index % 2 !== 0 ? projectBlue : projectGreen" alt="" />
|
||||
<img
|
||||
class="cover-img"
|
||||
:src="coverImgMap[pool.iconFile ? 'custom' : index % 2 !== 0 ? 'blue' : 'green']"
|
||||
alt=""
|
||||
/>
|
||||
<div class="overlay-text">
|
||||
<div class="pool-title" :title="pool.poolName">{{ pool.poolName }}</div>
|
||||
</div>
|
||||
@@ -36,8 +40,9 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import { computed, ref } from 'vue';
|
||||
import { MoreFilled } from '@element-plus/icons-vue';
|
||||
import { FileUtil } from '@/utils/file';
|
||||
import projectBlue from '@/assets/imgs/projectList/project-blue.png';
|
||||
import projectGreen from '@/assets/imgs/projectList/project-green.png';
|
||||
|
||||
@@ -55,6 +60,15 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
|
||||
const emit = defineEmits(['cardClick', 'actionClick']);
|
||||
|
||||
const coverImgMap = computed(() => {
|
||||
const firstIconFile = props.pool.iconFile ? props.pool.iconFile.split(',')[0] : '';
|
||||
return {
|
||||
custom: FileUtil.getFilePreviewImgPathUrl(firstIconFile),
|
||||
blue: projectBlue,
|
||||
green: projectGreen,
|
||||
};
|
||||
});
|
||||
|
||||
const isDropdownVisible = ref(false);
|
||||
|
||||
const cardClickFun = () => {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</span>
|
||||
</template>
|
||||
<template #leftOptions>
|
||||
<el-button type="primary" icon="plus" @click="addPoolModalVisible = true">
|
||||
<el-button type="primary" icon="plus" @click="openAddPoolFun">
|
||||
{{ $t('工况库.创建地图库') }}
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -49,8 +49,8 @@
|
||||
/>
|
||||
<AddPoolModal
|
||||
v-model="addPoolModalVisible"
|
||||
mode="add"
|
||||
:detail="{}"
|
||||
:mode="poolModalMode"
|
||||
:detail="editPoolData"
|
||||
:poolList="poolListData"
|
||||
@confirm="onAddPoolConfirmFun"
|
||||
/>
|
||||
@@ -83,6 +83,13 @@ const actionList = ref([
|
||||
cardClickFun(row);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '编辑',
|
||||
type: 'primary',
|
||||
click: (row: any) => {
|
||||
openEditPoolFun(row);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '删除',
|
||||
type: 'danger',
|
||||
@@ -148,15 +155,35 @@ const onDelPoolConfirmFun = () => {
|
||||
|
||||
const addPoolModalVisible = ref(false);
|
||||
const poolListData = ref<any[]>([]);
|
||||
const editPoolData = ref<any>(null);
|
||||
const poolModalMode = ref<'add' | 'edit'>('add');
|
||||
|
||||
const openAddPoolFun = () => {
|
||||
editPoolData.value = null;
|
||||
poolModalMode.value = 'add';
|
||||
addPoolModalVisible.value = true;
|
||||
};
|
||||
|
||||
const openEditPoolFun = (row: any) => {
|
||||
editPoolData.value = row;
|
||||
poolModalMode.value = 'edit';
|
||||
addPoolModalVisible.value = true;
|
||||
};
|
||||
|
||||
const onAddPoolConfirmFun = (formData: any) => {
|
||||
addPoolModalVisible.value = false;
|
||||
jumpPage({
|
||||
path: `${route.path}/detail`,
|
||||
query: {
|
||||
poolName: formData.name,
|
||||
isNew: 'true',
|
||||
},
|
||||
});
|
||||
if (poolModalMode.value === 'edit') {
|
||||
baseTableRef.value?.resetFun();
|
||||
} else {
|
||||
jumpPage({
|
||||
path: `${route.path}/detail`,
|
||||
query: {
|
||||
poolName: formData.poolName,
|
||||
isNew: 'true',
|
||||
poolBriefData: JSON.stringify(formData),
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@@ -543,11 +543,24 @@ const createTaskPoolFun = async (formData: any) => {
|
||||
const columns = getVxeRef()?.getColumns();
|
||||
const nodes = cloneDeep(fullData);
|
||||
const pickedNodes = transformTreeToPoolNodes(nodes);
|
||||
|
||||
const poolBrief = {
|
||||
poolName: currentPoolBrief.value.poolName,
|
||||
tenantId: currentPoolBrief.value.tenantId,
|
||||
};
|
||||
|
||||
Object.keys(currentPoolBrief.value).forEach((key) => {
|
||||
if (key !== 'poolName' && key !== 'tenantId' && key !== 'versions') {
|
||||
poolBrief[key] = currentPoolBrief.value[key];
|
||||
}
|
||||
});
|
||||
|
||||
if (formData.poolBriefData) {
|
||||
Object.assign(poolBrief, formData.poolBriefData);
|
||||
}
|
||||
|
||||
const req = {
|
||||
poolBrief: {
|
||||
poolName: currentPoolBrief.value.poolName,
|
||||
tenantId: currentPoolBrief.value.tenantId,
|
||||
},
|
||||
poolBrief,
|
||||
nodes: pickedNodes,
|
||||
bApprove: formData.bApprove,
|
||||
approveTemplateId: formData.approveTemplateId,
|
||||
@@ -1288,11 +1301,22 @@ const onListTableFilterConfirmFun = (params: any) => {
|
||||
const initPageDataFun = async () => {
|
||||
const queryPoolName = route.query?.poolName as string;
|
||||
const isNewPool = route.query?.isNew === 'true';
|
||||
const poolBriefDataStr = route.query?.poolBriefData as string;
|
||||
|
||||
if (isNewPool && queryPoolName) {
|
||||
let poolBriefData = {};
|
||||
if (poolBriefDataStr) {
|
||||
try {
|
||||
poolBriefData = JSON.parse(poolBriefDataStr);
|
||||
} catch (error) {
|
||||
console.error('解析 poolBriefData 失败', error);
|
||||
}
|
||||
}
|
||||
|
||||
const newPool = {
|
||||
tenantId,
|
||||
poolName: queryPoolName,
|
||||
...poolBriefData,
|
||||
};
|
||||
const { pools } = await getEarlyPoolData(true);
|
||||
poolList.value = pools;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
:hide-pagination="true"
|
||||
>
|
||||
<template #leftOptions>
|
||||
<!-- <el-button type="primary">同步</el-button> -->
|
||||
<el-button type="primary" @click="syncFun">同步</el-button>
|
||||
<el-button type="primary" @click="openDialog('add')">新增</el-button>
|
||||
</template>
|
||||
</BaseTable>
|
||||
@@ -53,6 +53,7 @@ import {
|
||||
} from '@/api/system/systemData';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { syncLyricUsersApi } from '@/api/system/lyricUser';
|
||||
|
||||
const tableData = ref<any>([]);
|
||||
const isEditDialog = ref(false);
|
||||
@@ -169,6 +170,15 @@ const updateDataFun = async () => {
|
||||
} catch {}
|
||||
};
|
||||
|
||||
const syncFun = async () => {
|
||||
try {
|
||||
const res: any = await syncLyricUsersApi();
|
||||
if (res && res.code === 200) {
|
||||
await getTableDataFun();
|
||||
}
|
||||
} catch {}
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
await getTableDataFun();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user