1.5.6前端

AI表单快捷填报完善,增加报工测试页面,并且增加语音的识别
master
xs 3 months ago
parent 36a09cdcf0
commit 0285999cf3

@ -3,7 +3,7 @@
<router-view />
</el-config-provider>
<PrintView ref="printView" />
<ai-assistant ref="aiAssistantRef" :isLeft="false" />
<ai-assistant ref="aiAssistantRef" />
<div class="floatIcon" @click="openAiAssistantMenu">
<svg-icon class-name="search-icon" icon-class="Ai" />
</div>
@ -37,12 +37,16 @@ const openAiAssistantMenu = () => {
};
</script>
<style>
<style lang="less">
.floatIcon {
position: fixed;
top: 50%;
right: 0;
right: 10px;
width: 24px;
height: 24px;
}
/deep/.el-message {
z-index:8006 !important;
}
</style>

@ -78,6 +78,7 @@ export function getAiFormSettingList (query) {
// 获取数据源名称
export const getDataNames = () => {
return request({
@ -104,3 +105,17 @@ export const listDbTableColumn = (query: DbTableQuery): AxiosPromise<AiFormSetti
params: query
});
};
/**
* AI
* @param query
* @returns {*}
*/
export function getAiFormSettingDetailList (query) {
return request({
url: '/ai/aiFormSetting/getAiFormSettingDetailList',
method: 'get',
params: query
});
};

@ -54,6 +54,11 @@ export interface AiFormSettingVO {
*/
remark: string;
/**
* AI
*/
aiFormSettingDetailList: AiFormSettingDetailVO[];
}
export interface AiFormSettingForm extends BaseEntity {

@ -0,0 +1,43 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { AIFillFormRequestVO } from '@/api/ai/skill/aiAssistant/types';
import {AiKnowledgeBaseTypeForm} from "@/api/ai/base/aiKnowledgeBaseType/types";
export const aiFillForm = (data?: AIFillFormRequestVO): AxiosPromise<AIFillFormRequestVO[]> => {
return request({
url: '/ai/assistant/aiFillForm',
method: 'post',
data: data,
timeout: 1000000
});
};
export const asr = (data: any) => {
return request({
url: '/ai/api/speech/recognize',
method: 'post',
data: data,
timeout: 1000000
});
};
export const uploadFile = (data: any) => {
return request({
url: '/resource/oss/upload',
method: 'post',
data: data
});
};
export const recognizeSpeechByUrl = (audioUrl: string) => {
return request({
url: '/ai/asr/recognizeSpeechByUrl',
method: 'post',
params: {audioUrl}
});
};

@ -0,0 +1,22 @@
import {AiFormSettingDetailVO} from "@/api/ai/base/aiFormSetting/types";
export interface AIFillFormRequestVO {
/**
* AIID
*/
formSettingId: number;
/**
* prompt
*/
naturalLanguageQuery: string;
/**
* AI
*/
formSettingDetailList: AiFormSettingDetailVO[];
}

File diff suppressed because it is too large Load Diff

@ -43,6 +43,7 @@
<!-- 列表展示 -->
<el-card shadow="never" class="mt-4">
<el-table v-loading="loading" :data="aiFormSettingList" @selection-change="handleSelectionChange">
<el-table-column label="编号" align="center" prop="formSettingId"/>
<el-table-column label="表名称" align="center" prop="tableName"/>
<el-table-column label="表单名称" align="center" prop="formName"/>
<el-table-column label="客户端类型" align="center" prop="clientType">

@ -0,0 +1,177 @@
<template>
<div class="mes-report-container">
<el-card class="report-card">
<template #header>
<div class="card-header">
<span>报工</span>
</div>
</template>
<el-form
ref="reportForm"
:model="formData"
:rules="rules"
label-width="120px"
label-position="left"
>
<el-form-item label="工单号" prop="planCode">
WO20250917001
</el-form-item>
<el-form-item label="产品名称" prop="materialName">
淮阴零排放破碎机控制柜
</el-form-item>
<el-form-item label="产品规格" prop="materialSpec">
淮阴零排放项目尺寸H500*W400*D250mm材质304不锈钢本色
</el-form-item>
<el-form-item label="计划数量" prop="planAmount">
100
</el-form-item>
<el-form-item label="已完成数量" prop="completeAmount1">
75
</el-form-item>
<el-form-item label="单位" prop="unit">
</el-form-item>
<el-form-item label="工序名称" prop="processName">
装配
</el-form-item>
<el-form-item label="计划开始时间" prop="planBeginTime">
2025-09-17 09:00:00
</el-form-item>
<el-form-item label="计划结束时间" prop="planEndTime">
2025-12-17 18:00:00
</el-form-item>
<el-divider>报工信息</el-divider>
<el-form-item label="报工数量" prop="completeAmount">
<el-input-number
v-model="formData.completeAmount"
:min="1"
:max="100000"
controls-position="right"
/>
</el-form-item>
<el-form-item label="工时(分钟)" prop="productionTime">
<el-input-number
v-model="formData.productionTime"
:min="1"
:max="1000"
controls-position="right"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm"></el-button>
<el-button @click="resetForm"></el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 报工结果展示 -->
<el-card v-if="resultData" class="result-card">
<template #header>
<div class="card-header">
<span>报工结果</span>
</div>
</template>
<pre>{{ JSON.stringify(resultData, null, 2) }}</pre>
</el-card>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ElMessage } from 'element-plus';
interface FormData {
completeAmount: number;
productionTime: number;
remark: string;
}
const props = defineProps<FormData>()
const formData = reactive<FormData>({
completeAmount: undefined,
productionTime:undefined,
remark: '',
});
//
// Object.keys(formData).forEach(key => {
// if (props[key] !== undefined) {
// formData[key] = props[key]
// }
// })
// props
watch(
() => ({ ...props }),
(newProps) => {
Object.keys(formData).forEach(key => {
console.log("---12323-");
if (newProps[key] !== undefined) {
formData[key] = newProps[key]
console.log(newProps[key]);
}
})
},
{ immediate: true, deep: true }
)
const processOptions = [
{ label: '工序A', value: 'processA' },
{ label: '工序B', value: 'processB' },
{ label: '工序C', value: 'processC' },
];
const rules = {
completeAmount: [{ required: true, message: '请输入报工数量', trigger: 'blur' }],
productionTime: [{ required: true, message: '请输入工时', trigger: 'blur' }],
};
const resultData = ref(null);
const reportForm = ref(null);
const submitForm = () => {
reportForm.value.validate((valid) => {
if (valid) {
//
resultData.value = {
status: 'success',
message: '报工成功',
data: formData.value,
};
ElMessage.success('报工提交成功!');
} else {
ElMessage.error('请填写完整表单!');
}
});
};
const resetForm = () => {
reportForm.value.resetFields();
resultData.value = null;
};
</script>
<style scoped>
.mes-report-container {
padding: 20px;
}
.report-card,
.result-card {
margin-bottom: 20px;
}
.card-header {
font-size: 18px;
font-weight: bold;
}
</style>
Loading…
Cancel
Save