Commit 80200a17 authored by mhw's avatar mhw

版本跟新

parent 56d379cc
This diff is collapsed.
...@@ -40,4 +40,7 @@ export default class PresetTemplateController { ...@@ -40,4 +40,7 @@ export default class PresetTemplateController {
static deleteCollect (sender, params, axiosOption, httpOption) { static deleteCollect (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/promptTemplate/deleteCollect', 'post', params, axiosOption, httpOption); return sender.doUrl('/admin/app/promptTemplate/deleteCollect', 'post', params, axiosOption, httpOption);
} }
static listForTree (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/promptTemplate/listForTree', 'post', params, axiosOption, httpOption);
}
} }
...@@ -122,14 +122,24 @@ body .fullscreen-dialog .layui-layer-content { ...@@ -122,14 +122,24 @@ body .fullscreen-dialog .layui-layer-content {
} }
.orange-project { .orange-project {
.el-button--primary { .el-button--primary {
background-color: $--color-primary !important; background-color: $--color-primary;
border-color:$--color-primary !important; border-color:$--color-primary ;
} }
.el-button.is-plain:hover, .el-button.is-plain:focus{ .el-button--primary.is-plain {
background: #FFFFFF; color: #0092FF;
border-color: $--color-primary; background: #e6f4ff;
color: $--color-primary; border-color: #99d3ff;
} }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #0092FF;
border-color: #0092FF;
color: #FFFFFF;
}
// .el-button.is-plain:hover, .el-button.is-plain:focus{
// background: #FFFFFF;
// border-color: $--color-primary;
// color: $--color-primary;
// }
.el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus {
background: #F56C6C; background: #F56C6C;
border-color: #F56C6C; border-color: #F56C6C;
......
...@@ -34,6 +34,7 @@ import OnlineBaseCard from '@/online/components/OnlineBaseCard.vue'; ...@@ -34,6 +34,7 @@ import OnlineBaseCard from '@/online/components/OnlineBaseCard.vue';
import OnlineCustomTabs from '@/online/components/OnlineCustomTabs.vue'; import OnlineCustomTabs from '@/online/components/OnlineCustomTabs.vue';
import OnlineCustomTableContainer from '@/online/components/OnlineTableContainer/index.vue'; import OnlineCustomTableContainer from '@/online/components/OnlineTableContainer/index.vue';
import VueClipboard from 'vue-clipboard2' import VueClipboard from 'vue-clipboard2'
Vue.prototype.$SocketService = SocketService Vue.prototype.$SocketService = SocketService
Vue.use(VueClipboard) Vue.use(VueClipboard)
Vue.component('OnlineCustomBlock', OnlineCustomBlock); Vue.component('OnlineCustomBlock', OnlineCustomBlock);
...@@ -54,7 +55,14 @@ Vue.component('user-select', UserSelect); ...@@ -54,7 +55,14 @@ Vue.component('user-select', UserSelect);
Vue.component('dept-select', DeptSelect); Vue.component('dept-select', DeptSelect);
Vue.component('table-box', TableBox); Vue.component('table-box', TableBox);
Vue.component('right-add-btn', RightAddBtn); Vue.component('right-add-btn', RightAddBtn);
var EventBus = new Vue();
Object.defineProperties(Vue.prototype, {
$bus: {
get: function () {
return EventBus
}
}
})
Vue.use(ElementUI); Vue.use(ElementUI);
Vue.use(VCharts); Vue.use(VCharts);
......
...@@ -49,7 +49,11 @@ ...@@ -49,7 +49,11 @@
</vxe-column> </vxe-column>
<vxe-column field="runCount" title="运行数量"></vxe-column> <vxe-column field="runCount" title="运行数量"></vxe-column>
<vxe-column field="taskDescribe" title="任务描述"></vxe-column> <vxe-column field="taskDescribe" title="任务描述"></vxe-column>
<vxe-column field="createUserId" title="创建人"></vxe-column> <vxe-column field="createUserId" title="创建人">
<template slot-scope="scope">
{{scope.row.createUserIdDictMap.name}}
</template>
</vxe-column>
<vxe-column field="createTime" title="创建时间"></vxe-column> <vxe-column field="createTime" title="创建时间"></vxe-column>
<vxe-column field="operation" title="操作"> <vxe-column field="operation" title="操作">
<template slot-scope="scope"> <template slot-scope="scope">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<el-descriptions title="基本信息" style="width: 100%;line-height: 30px;"> <el-descriptions title="基本信息" style="width: 100%;line-height: 30px;">
<el-descriptions-item label="任务名称:">{{tableItem.taskName}}</el-descriptions-item> <el-descriptions-item label="任务名称:">{{tableItem.taskName}}</el-descriptions-item>
<el-descriptions-item label="任务ID:">{{tableItem.taskId}}</el-descriptions-item> <el-descriptions-item label="任务ID:">{{tableItem.taskId}}</el-descriptions-item>
<el-descriptions-item label="创建人:">{{tableItem.updateUserId}}</el-descriptions-item> <el-descriptions-item label="创建人:">{{tableItem.createUserIdDictMap.name}}</el-descriptions-item>
<el-descriptions-item label="创建时间:">{{tableItem.createTime}}</el-descriptions-item> <el-descriptions-item label="创建时间:">{{tableItem.createTime}}</el-descriptions-item>
<el-descriptions-item label="任务描述:">{{tableItem.taskDescribe}}</el-descriptions-item> <el-descriptions-item label="任务描述:">{{tableItem.taskDescribe}}</el-descriptions-item>
<el-descriptions-item label="任务类型:">{{ModelType.getValue(tableItem.taskType) }}</el-descriptions-item> <el-descriptions-item label="任务类型:">{{ModelType.getValue(tableItem.taskType) }}</el-descriptions-item>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<el-descriptions title="基本信息"> <el-descriptions title="基本信息">
<el-descriptions-item label="运行名称:">{{item.runName}}</el-descriptions-item> <el-descriptions-item label="运行名称:">{{item.runName}}</el-descriptions-item>
<el-descriptions-item label="运行ID:">{{item.runId}}</el-descriptions-item> <el-descriptions-item label="运行ID:">{{item.runId}}</el-descriptions-item>
<el-descriptions-item label="创建人:">{{ item.createUserId }}</el-descriptions-item> <el-descriptions-item label="创建人:">{{ item.createUserIdDictMap.name }}</el-descriptions-item>
<el-descriptions-item label="创建时间:">{{item.createTime }}</el-descriptions-item> <el-descriptions-item label="创建时间:">{{item.createTime }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
......
...@@ -171,7 +171,7 @@ export default { ...@@ -171,7 +171,7 @@ export default {
particulars (item) { particulars (item) {
this.$dialog.show('任务详情', taskOperate, { this.$dialog.show('任务详情', taskOperate, {
area: ['100%', '100%'] area: ['100%', '100%']
}, {page: 'particulars', item: item }).then(res => { }, {page: 'particulars', item: {...item, createUserIdDictMap: this.tableItem.createUserIdDictMap} }).then(res => {
this.refresh(); this.refresh();
}).catch(e => { }).catch(e => {
this.refresh(); this.refresh();
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<el-table :data="tableData"> <el-table :data="tableData">
<el-table-column prop="label" label="自动规则打分指标"> <el-table-column prop="label" label="自动规则打分指标">
</el-table-column> </el-table-column>
<el-table-column prop="value" :label="item.modelTask.versionName" > <el-table-column prop="value" :label="item.modelVersionIdDictMap.name" >
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
:data="myDataSetPage.tableData.impl.dataList" min-height="96"> :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<vxe-column title="模型名称"> <vxe-column title="模型名称">
<template > <template >
{{ item.modelTask.versionName }} {{ item.modelVersionIdDictMap.name }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="input" title="Prompt问题"></vxe-column> <vxe-column field="input" title="Prompt问题"></vxe-column>
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
</el-card> </el-card>
<el-card class="box-card"> <el-card class="box-card">
<el-descriptions title="数据配置"> <el-descriptions title="数据配置">
<el-descriptions-item label="数据集:">{{item.datasetVersionId}}</el-descriptions-item> <el-descriptions-item label="数据集:">{{item.datasetVersionIdDictMap.name}}</el-descriptions-item>
<el-descriptions-item label="数据模型:">{{item.modelTask.versionName}}</el-descriptions-item> <el-descriptions-item label="数据模型:">{{item.modelVersionIdDictMap.name}}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
...@@ -46,7 +46,7 @@ export default { ...@@ -46,7 +46,7 @@ export default {
}, },
mounted () { mounted () {
console.log(this.item);
}, },
methods: { methods: {
......
...@@ -46,7 +46,14 @@ export default { ...@@ -46,7 +46,14 @@ export default {
timeImg: null timeImg: null
}; };
}, },
props: ['page', 'item'], props: {
page: {
default: 'particulars'
},
item: {
default: {}
}
},
components: { particulars, assessmentReport, trainingLog }, components: { particulars, assessmentReport, trainingLog },
computed: {}, computed: {},
......
...@@ -49,6 +49,7 @@ import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/ ...@@ -49,6 +49,7 @@ import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/
import { ModelTask } from '@/api/gptController.js'; import { ModelTask } from '@/api/gptController.js';
// import editOrAdd from './dialog/editOrAdd'; // import editOrAdd from './dialog/editOrAdd';
import particulars from '@/views/gptTraining/modelManagement/modelEvaluation/dialog/particulars.vue'; import particulars from '@/views/gptTraining/modelManagement/modelEvaluation/dialog/particulars.vue';
import modelCompressionParticulars from '@/views/gptTraining/modelManagement/modelCompression/dialog/particulars.vue';
export default { export default {
data () { data () {
...@@ -136,12 +137,35 @@ export default { ...@@ -136,12 +137,35 @@ export default {
}) })
}, },
particulars (item) { particulars (item) {
console.log(item); // {
this.$dialog.show('详情', particulars, { // id: 0,
area: ['100%', '100%'] // name: '新建版本',
}, { item: item }).then(res => { // symbol: 'NewVersion'
this.refresh(); // },
}).catch(e => { }); // {
// id: 1,
// name: '模型评估',
// symbol: 'modelEvaluation'
// },
// {
// id: 2,
// name: '模型压缩',
// symbol: 'ModelCompression'
// }
console.log(item, item.taskStatus);
if (item.taskStatus === 2) { // 模型压缩
this.$dialog.show('详情', modelCompressionParticulars, {
area: ['100%', '100%']
}, { item: item }).then(res => {
this.refresh();
}).catch(e => { });
} else {
this.$dialog.show('详情', particulars, {
area: ['100%', '100%']
}, { item: item }).then(res => {
this.refresh();
}).catch(e => { });
}
}, },
refresh (reloadData = false) { refresh (reloadData = false) {
if (reloadData) { if (reloadData) {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<vxe-column field="taskType" title="任务类型"> <vxe-column field="taskType" title="任务类型">
<template slot-scope="scope"> <template slot-scope="scope">
{{ TaskType.getValue(scope.row.taskType) }} {{ TaskType.getValue(scope.row.taskType) }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="taskStatus" title="任务状态"> <vxe-column field="taskStatus" title="任务状态">
...@@ -49,7 +50,7 @@ import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/ ...@@ -49,7 +50,7 @@ import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/
import { ModelTask } from '@/api/gptController.js'; import { ModelTask } from '@/api/gptController.js';
// import editOrAdd from './dialog/editOrAdd'; // import editOrAdd from './dialog/editOrAdd';
import particulars from '@/views/gptTraining/modelManagement/modelEvaluation/dialog/particulars.vue'; import particulars from '@/views/gptTraining/modelManagement/modelEvaluation/dialog/particulars.vue';
import modelCompressionParticulars from '@/views/gptTraining/modelManagement/modelCompression/dialog/particulars.vue';
export default { export default {
data () { data () {
return { return {
...@@ -136,12 +137,20 @@ export default { ...@@ -136,12 +137,20 @@ export default {
}) })
}, },
particulars (item) { particulars (item) {
console.log(item); console.log(item, item.taskType);
this.$dialog.show('详情', particulars, { if (item.taskType === 2) { // 模型压缩
area: ['100%', '100%'] this.$dialog.show('模型压缩详情', modelCompressionParticulars, {
}, { item: item }).then(res => { area: ['100%', '100%']
this.refresh(); }, { item: item.modelCompress}).then(res => {
}).catch(e => { }); this.refresh();
}).catch(e => { });
} else {
this.$dialog.show('模型评估详情', particulars, {
area: ['100%', '100%']
}, { item: item.modelEstimate }).then(res => {
this.refresh();
}).catch(e => { });
}
}, },
refresh (reloadData = false) { refresh (reloadData = false) {
if (reloadData) { if (reloadData) {
......
<!-- 答案内容预览 -->
<template>
<vue-markdown :source="content" v-highlight class="markdown-body" >
</vue-markdown>
</template>
<script>
import hljs from 'highlight.js' // 代码块高亮
// import 'highlight.js/styles/github.css' // 代码块高亮样式
import 'github-markdown-css' // 整体 markdown 样式
import VueMarkdown from 'vue-markdown'
export default {
data () {
return {
result: undefined
};
},
props: ['content'],
components: {VueMarkdown},
computed: {},
directives: {
highlight: {
// 指令的定义
inserted: function (el) {
let blocks = el.querySelectorAll('pre code');
blocks.forEach((block, index) => {
/** 代码高亮 */
hljs.highlightBlock(block);
/** 手动添加一个hljs类名,防止不支持的语言背景变空白 */
block.classList.add('hljs');
})
}
}
},
mounted () {
},
methods: {}
}
</script>
<style scoped>
.markdown-body{
background: none !important;
font-size: 14px !important;
}
.markdown-body pre{
background-color: #3b3d3f;
}
</style>
<!--左侧操作界面 --> <!--左侧操作界面 -->
<template> <template>
<el-form label-position="left" ref="form" label-width="120px" :model="form" :size="defaultFormItemSize" style="padding:20px"> <el-form label-position="left" ref="form" label-width="120px" :model="form" :size="defaultFormItemSize"
style="padding:20px;width:400px">
<el-form-item label="请选择对话模式:"> <el-form-item label="请选择对话模式:">
<el-select v-model="form.pattern" placeholder="请选择"> <el-select v-model="form.pattern" placeholder="请选择">
<el-option v-for="item in ModeOfSpeaking.getList()" :key="item.id" :label="item.name" :value="item.name"> <el-option v-for="item in ModeOfSpeaking.getList()" :key="item.id" :label="item.name" :value="item.name">
...@@ -12,45 +13,66 @@ ...@@ -12,45 +13,66 @@
:props='{ label: "name", value: "name", emitPath: false }' @change="changeModel"></el-cascader> :props='{ label: "name", value: "name", emitPath: false }' @change="changeModel"></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="Temperature:"> <el-form-item label="Temperature:">
<el-slider v-model="temperature" :format-tooltip="formatTooltip" @change="form.temperature=temperature / 100"></el-slider> <el-slider v-model="temperature" :format-tooltip="formatTooltip"
@change="form.temperature = temperature / 100"></el-slider>
</el-form-item> </el-form-item>
<el-form-item label="历史对话轮数:"> <el-form-item label="历史对话轮数:">
<el-input-number v-model="form.heistoryRotate" :min="0" :max="10" ></el-input-number> <el-input-number v-model="form.heistoryRotate" :min="0" :max="10"></el-input-number>
</el-form-item>
<el-form-item label="提示词:">
<el-select v-model="promptTemplate" filterable placeholder="请选择提示词" value-key="templateId"
@change="templateControllerChange" clearable>
<el-option v-for="item in templateControllerList" :key="item.value" :label="item.label" :value="item">
</el-option>
</el-select>
<el-switch @change="changePromptTemplate" style="margin-left: 10px;" v-model="isPromptTemplate"
active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</el-form-item>
<el-form-item label-width="0px" v-if="form.prompt_template">
<div style="background-color: #f3f3f3;
padding: 10px;
border-radius: 10px;">
{{ form.prompt_template }}
</div>
</el-form-item> </el-form-item>
<el-form-item label-width="0px" v-if="form.pattern=='知识库问答'"> <el-form-item label-width="0px" v-if="form.pattern == '知识库问答'">
<el-collapse value="1"> <el-collapse value="1">
<el-collapse-item name="1"> <el-collapse-item name="1">
<template slot="title">知识库配置</template> <template slot="title">知识库配置</template>
<el-form-item label="请选择知识库:" style="margin-bottom:30px"> <el-form-item label="请选择知识库:" style="margin-bottom:30px">
<el-select ref="knowledgeSelect" v-model="form.knowledgeConfige.knowledge_base_name" placeholder="请选择" @change="changeKnowledge"> <el-select ref="knowledgeSelect" v-model="form.knowledgeConfige.knowledge_base_name" placeholder="请选择"
<el-option v-for="item in knowledgeList" :key="item.knowledgeId" :label="item.knowledgeName" :value="item.knowledgeName"> @change="changeKnowledge">
<el-option v-for="item in knowledgeList" :key="item.knowledgeId" :label="item.knowledgeName"
:value="item.knowledgeName">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="匹配知识条数:" style="margin-bottom:30px"> <el-form-item label="匹配知识条数:" style="margin-bottom:30px">
<el-input-number v-model="form.knowledgeConfige.top_k" :min="1" :max="20" ></el-input-number> <el-input-number v-model="form.knowledgeConfige.top_k" :min="1" :max="20"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="知识匹配分数阈值:"> <el-form-item label="知识匹配分数阈值:">
<el-slider v-model="form.knowledgeConfige.score_threshold" :format-tooltip="formatTooltip" @change="form.knowledgeConfige.score_threshold=knowledgeScoreThreshold / 100"></el-slider> <el-slider v-model="knowledgeScoreThreshold" :format-tooltip="formatTooltip"
@change="form.knowledgeConfige.score_threshold = knowledgeScoreThreshold / 100"></el-slider>
</el-form-item> </el-form-item>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</el-form-item> </el-form-item>
<el-form-item label-width="0px" v-if="form.pattern == '搜索引擎问答'">
<el-form-item label-width="0px" v-if="form.pattern=='搜索引擎问答'">
<el-collapse value="1"> <el-collapse value="1">
<el-collapse-item name="1"> <el-collapse-item name="1">
<template slot="title">搜索引擎配置</template> <template slot="title">搜索引擎配置</template>
<el-form-item label="选择搜索引擎:" style="margin-bottom:30px"> <el-form-item label="选择搜索引擎:" style="margin-bottom:30px">
<el-select ref="searchSelect" v-model="form.searchConfige.search_engine_name" placeholder="请选择" @change="changeSe"> <el-select ref="searchSelect" v-model="form.searchConfige.search_engine_name" placeholder="请选择"
<el-option v-for="item in [{label:'bing',value:'bing'},{label:'duckduckgo',value:'duckduckgo'}]" :key="item.value" :label="item.label" :value="item.value"> @change="changeSe">
<el-option v-for="item in [{ label: 'bing', value: 'bing' }, { label: 'duckduckgo', value: 'duckduckgo' }]"
:key="item.value" :label="item.label" :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="匹配搜索结果条数:"> <el-form-item label="匹配搜索结果条数:">
<el-input-number v-model="form.searchConfige.top_k" :min="1" :max="20" ></el-input-number> <el-input-number v-model="form.searchConfige.top_k" :min="1" :max="20"></el-input-number>
</el-form-item> </el-form-item>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
...@@ -60,10 +82,14 @@ ...@@ -60,10 +82,14 @@
</template> </template>
<script> <script>
import { KnowledgeManage, MyModel, ModelVersion } from '@/api/gptController.js'; import { KnowledgeManage, MyModel, ModelVersion, TemplateController } from '@/api/gptController.js';
import promptWordTemplate from '../promptWordTemplate';
export default { export default {
data () { data () {
return { return {
isPromptTemplate: true,
promptTemplate: '',
templateControllerList: [],
modelList: [], modelList: [],
activeModelList: [], activeModelList: [],
loading: undefined, loading: undefined,
...@@ -75,6 +101,7 @@ export default { ...@@ -75,6 +101,7 @@ export default {
pattern: 'LLM 对话', // 对话模式 pattern: 'LLM 对话', // 对话模式
model_name: undefined, // 模型名称 model_name: undefined, // 模型名称
temperature: 0.7, temperature: 0.7,
prompt_template: '',
heistoryRotate: 10, // 历史对话轮数 heistoryRotate: 10, // 历史对话轮数
knowledgeConfige: {// 知识库配置 knowledgeConfige: {// 知识库配置
knowledge_base_name: '', knowledge_base_name: '',
...@@ -107,9 +134,24 @@ export default { ...@@ -107,9 +134,24 @@ export default {
mounted () { mounted () {
this.getKnowledgeList() this.getKnowledgeList()
this.getModelList() this.getModelList()
this.getTemplateControllerList()
}, },
methods: { methods: {
getTemplateControllerList () {
TemplateController.listForTree(this, {}).then(res => {
this.templateControllerList = res.data.map((item) => {
return {
templateId: item.templateId,
label: item.templateName,
value: item.templateContent,
parameterFormat: item.parameterFormat
}
})
}).catch(e => {
console.log(e);
});
},
getModelList () { getModelList () {
MyModel.listForTree(this, {}).then(res => { MyModel.listForTree(this, {}).then(res => {
this.modelList = res.data.map((item) => { this.modelList = res.data.map((item) => {
...@@ -159,7 +201,7 @@ export default { ...@@ -159,7 +201,7 @@ export default {
}, },
switchModel (versionId) { // 切换模型 switchModel (versionId) { // 切换模型
this.openLoading('LLM模型加载中') this.openLoading('LLM模型加载中')
ModelVersion.change(this, {versionId: versionId}).then(res => { ModelVersion.change(this, { versionId: versionId }).then(res => {
console.log(res); console.log(res);
this.loading.close(); this.loading.close();
}).catch(e => { }).catch(e => {
...@@ -179,13 +221,36 @@ export default { ...@@ -179,13 +221,36 @@ export default {
changeSe (dtat) { // 修改模型引擎 changeSe (dtat) { // 修改模型引擎
// this.openLoading('模型引擎加载中') // this.openLoading('模型引擎加载中')
// console.log(this.$refs.searchSelect); // console.log(this.$refs.searchSelect);
},
templateControllerChange (data) {
if (!data) {
this.form.prompt_template = ''
return
}
this.$dialog.show(data.label, promptWordTemplate, {
area: ['50%', '40%']
}, { data: data }).then(res => {
this.form.prompt_template = res
}).catch(e => {
this.promptTemplate = undefined
});
},
changePromptTemplate () {
console.log(1, this.$bus);
this.$bus.$emit('isPromptTemplate', this.isPromptTemplate);
} }
} }
} }
</script> </script>
<style > <style >
.myLoading .el-loading-spinner i{ .myLoading .el-loading-spinner i {
font-size: 24px !important; font-size: 24px !important;
} }
.el-form-item__content{
display: flex;
flex-direction: row;
align-items: center;
}
</style> </style>
<!-- 提示词模板 -->
<template>
<div>
<div class="promptWordTemplate">
<span v-for="(item,index) in content" :key="index">
<template v-if="item.text">
{{ item.text }}
</template>
<template v-else-if="item.placeholder">
<el-input v-model="item.value" style="display:inline-block;width: 100px;margin-left: 10px;" size="small" :placeholder="item.placeholder"></el-input>
</template>
</span>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button>
</el-row>
</div>
</div>
</template>
<script>
export default {
data () {
return {
content: undefined,
text: '',
placeholders: []
};
},
props: ['data'],
components: {},
computed: {},
mounted () {
this.content = this.domRender(this.data.value, this.data.parameterFormat).map((item, index) => {
let x = this.placeholders.indexOf(item) !== -1
return {
text: x ? '' : item,
value: '',
placeholder: x ? item : ''
}
})
},
methods: {
onCancel (isSuccess, data) {
if (this.observer != null) {
this.observer.cancel(isSuccess, data);
}
},
domRender (str, parameterFormat) {
var match;
let strData = str
var regexPattern = new RegExp(`\\${parameterFormat[0]}([^}]+)\\${parameterFormat[1]}`, 'g');
while ((match = regexPattern.exec(str)) !== null) {
this.placeholders.push(match[1]);
}
var reg = new RegExp(`\\${parameterFormat[0]}(.*?)\\${parameterFormat[1]}`, 'g')
strData = strData.split(reg);
return strData
},
onSubmit () {
this.content.forEach(element => {
this.text += element.text || element.value
});
this.onCancel(true, this.text)
}
}
}
</script>
<style scoped>
.promptWordTemplate{
line-height: 30px;
}
</style>
...@@ -64,6 +64,7 @@ export default { ...@@ -64,6 +64,7 @@ export default {
background: #fff; background: #fff;
position: relative; position: relative;
transition: all 0.3s; transition: all 0.3s;
} }
.leftBox{ .leftBox{
......
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
<div class="login-input"> <div class="login-input">
<span class="title">欢迎登录</span> <span class="title">欢迎登录</span>
<span class="desc">{{projectName}}</span> <span class="desc">{{projectName}}</span>
<el-form :model="dataForm" :rules="dataRule" size="medium" ref="dataForm" @keyup.enter.native="dataFormSubmit()"> <el-form :model="dataForm" label-position="top" :rules="dataRule" size="medium" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="70px">
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="mobilePhone" label="用户名" style="margin-bottom: 12px;"> <el-form-item prop="mobilePhone" label="用户名" >
<el-input v-model="dataForm.mobilePhone" style="width: 100%;" placeholder="帐号"> <el-input v-model="dataForm.mobilePhone" style="width: 100%;" placeholder="帐号">
<img slot="prefix" src="@/assets/img/login_username.png" alt=""> <img slot="prefix" src="@/assets/img/login_username.png" alt="">
</el-input> </el-input>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment