Browse Source

添加数据源

qin_v10
hreenshan112 11 months ago
parent
commit
df51a7f5cf
  1. 2
      src/api/DesignForm/type.ts
  2. 14
      src/api/date/apidate.ts
  3. 33
      src/api/date/type.ts
  4. 163
      src/components/DesignForm/formControlPropertiNew.vue
  5. 304
      src/components/dataSource/index.vue
  6. 332
      src/views/date/assets.vue
  7. 217
      src/views/date/editAssets.vue
  8. 2
      src/views/sysworkflow/codepage/index.ts
  9. 299
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue

2
src/api/DesignForm/type.ts

@ -117,7 +117,7 @@ export interface formTabelStruct{
type:string; type:string;
attribute:string; attribute:string;
collation:string; collation:string;
null:string; nullVal:string;
key:string; key:string;
default:string; default:string;
extra:string; extra:string;

14
src/api/date/apidate.ts

@ -1,5 +1,9 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {
gainDatabaseInfo,
havesDatabaseInfo,
} from "@/api/date/type";
export function getOrPostDate(methodStr:string,data?: any) { export function getOrPostDate(methodStr:string,data?: any) {
return request({ return request({
url: "/systemapi/dataCenter/gaindataCenter", url: "/systemapi/dataCenter/gaindataCenter",
@ -14,3 +18,11 @@ export function postSaveData(data?: any) {
data: data data: data
}); });
} }
//获取数据表
export function gainDataTable(data?: gainDatabaseInfo): AxiosPromise<havesDatabaseInfo> {
return request({
url: "/systemapi/dataCenter/gainDataTable",
method: "POST",
data: data
});
}

33
src/api/date/type.ts

@ -288,3 +288,36 @@ export interface appMatrix{
outcomeName: string; outcomeName: string;
outcomeid: number; outcomeid: number;
} }
//获取数据源参数
export interface gainDatabaseInfo{
id: string;
type: string;
dataBaseName: string;
ip: string;
port: number;
userName: string;
password: string;
}
//接收数据库列表
export interface havesDatabaseInfo{
tableName: string;
tableKey: string;
fields?: fieldList[];
}
//数据表结构
export interface fieldList{
fieldes:string;
types:string;
attribute:string;
collation:string;
nullVal:string;
key:string;
defaultVal:string;
extra:string;
privileges:string;
comment:string;
pattern:string;
classify: string;
auxiliary: string;
}

163
src/components/DesignForm/formControlPropertiNew.vue

@ -31,6 +31,7 @@ import LayoutPage from "@/components/DesignForm/layoutPage/index.vue";
import { Plus } from "@element-plus/icons-vue"; import { Plus } from "@element-plus/icons-vue";
import Draggable from "vuedraggable-es"; import Draggable from "vuedraggable-es";
import { dataBaseStruct } from "@/api/date/type";
const props = withDefaults( const props = withDefaults(
// //
@ -83,6 +84,8 @@ const controlDataStyls = computed(() => {
return store.controlAttr.styles; return store.controlAttr.styles;
}); });
const openDataSourceBox = ref(false);
const dataSourceOption = ref([]); const dataSourceOption = ref([]);
const designType = inject("formDesignType"); const designType = inject("formDesignType");
const state = reactive({ const state = reactive({
@ -157,12 +160,31 @@ const numberUinrVerfy = reactive([...validateInt]);
const formAttr = computed(() => { const formAttr = computed(() => {
const isSearch = state.isSearch; const isSearch = state.isSearch;
return [ return [
{
label: "数据源",
placeholder: "请选择引用的数据源",
value: 1,
key: "dataSourceSetup",
type: "dataSourceSetup",
hide: isSearch,
options: [
{
label: "无",
value: "no",
},
{
label: "引用数据源",
value: "yes",
},
],
},
{ {
label: "表单名称", label: "表单名称",
placeholder: "用于保存的表单名称", placeholder: "用于保存的表单名称",
value: props.formOtherData.formName, value: props.formOtherData.formName,
key: "formName", key: "formName",
hide: isSearch, hide: isSearch,
disabled: false,
}, },
{ {
label: "数据源", label: "数据源",
@ -180,6 +202,7 @@ const formAttr = computed(() => {
placeholder: "表单唯一标识,可为空", placeholder: "表单唯一标识,可为空",
key: "name", key: "name",
hide: isSearch, hide: isSearch,
disabled: false,
}, },
// { // {
// label: '', // label: '',
@ -324,7 +347,7 @@ const attrList = computed(() => {
{ {
label: "字段标识", label: "字段标识",
value: name, value: name,
type: Object.keys(state.dataSourceList).length > 0 ? "select" : "text", type: Object.keys(state.dataSourceList).length > 0 ? "selectDataSoure" : "text",
placeholder: "字段唯一标识,对应数据库", placeholder: "字段唯一标识,对应数据库",
dict: state.dataSourceList, dict: state.dataSourceList,
path: "name", path: "name",
@ -1693,9 +1716,13 @@ defineExpose({ getFormFieldBySource, saveRefreshFormControlAttr });
// //
const isNotWrite = (val: any) => { const isNotWrite = (val: any) => {
// console.log("--->",val,props.customerformid) // console.log("--->",val,props.customerformid)
if (val.disabled) {
return true;
} else {
if (val.key === "name" && props.customerformid != "") { if (val.key === "name" && props.customerformid != "") {
return true; return true;
} }
}
return false; return false;
}; };
const isNotWriteWord = (val: any) => { const isNotWriteWord = (val: any) => {
@ -3568,15 +3595,102 @@ const radioChangeSet = (val: any) => {
}); });
} }
}; };
watch(
() => formData.value.dataSource,
(val: string) => {
if (val == "yes") {
formAttr.value.forEach((item) => {
console.log(item.label, "item.", item.type);
if (!item.hide) {
if (!item.type) {
// console.log(item.label, "item.", item.type);
item.disabled = true;
}
}
});
} else {
formData.value.dataSourceConfig.id = "";
formData.value.dataSourceConfig.dataBaseName = "";
formData.value.dataSourceConfig.tableName = "";
formData.value.dataSourceConfig.tableKey = "";
formData.value.dataSourceConfig.dsn = {
dataBaseName: "",
ip: "",
port: 0,
userName: "",
password: "",
};
formAttr.value.forEach((item) => {
console.log(item.label, "item.", item.type);
if (!item.hide) {
if (!item.type) {
// console.log(item.label, "item.", item.type);
item.disabled = false;
}
}
});
}
},
{
deep: true,
}
);
/**
@ 作者: 秦东
@ 时间: 2024-12-23 10:39:48
@ 功能: 打开数据源设定
*/
const openSetDataSource = () => {
openDataSourceBox.value = true;
};
/**
@ 作者: 秦东
@ 时间: 2024-12-23 16:36:16
@ 功能: 关闭数据源
*/
const closeDataSource = () => {
openDataSourceBox.value = false;
};
/**
@ 作者: 秦东
@ 时间: 2024-12-26 16:26:06
@ 功能: 设定关联数据
*/
// const dataList = ref<dataBaseStruct[]>([]);
const updataBase = (val: any) => {
console.log("设定关联数据", val);
formData.value.dataSourceConfig.id = val.id;
formData.value.dataSourceConfig.dataBaseName = val.dataBaseName;
formData.value.dataSourceConfig.tableName = val.tableName;
formData.value.dataSourceConfig.tableKey = val.tableKey;
formData.value.dataSourceConfig.dsn = val.dsn;
// dataList.value = val.fields;
state.dataSourceList = val.fields;
console.log("设定关联数据------1-------》", state.dataSourceList);
console.log("设定关联数据------2-------》", val.fields);
console.log("设定关联数据------3-------》", state.dataSourceList);
};
</script> </script>
<template> <template>
<DataSourcePage
v-model:isShow="openDataSourceBox"
@closeDataSource="closeDataSource"
@updataBase="updataBase"
/>
<div class="sidebar-tools"> <div class="sidebar-tools">
<el-tabs v-model="state.tabsName"> <el-tabs v-model="state.tabsName">
<el-tab-pane label="字段配置" name="first"> <el-tab-pane label="字段配置" name="first">
<el-form size="small" class="form"> <el-form size="small" class="form">
<!-- <div class=""><h3>通用属性</h3></div> --> <!-- <div class=""><h3>通用属性</h3></div> -->
<el-divider content-position="left">通用属性</el-divider> <el-divider content-position="left">通用属性</el-divider>
{{ attrList }}
<template v-for="(item, index) in attrList" :key="index"> <template v-for="(item, index) in attrList" :key="index">
<el-form-item :label="item.label" class="form_cont"> <el-form-item :label="item.label" class="form_cont">
<el-select <el-select
@ -3595,6 +3709,24 @@ const radioChangeSet = (val: any) => {
:label="item.path === 'name' ? `${opt.label}(${opt.name})` : opt" :label="item.path === 'name' ? `${opt.label}(${opt.name})` : opt"
/> />
</el-select> </el-select>
<el-select
v-if="item.type === 'selectDataSoure'"
:placeholder="item.placeholder"
v-model="item.value"
:filterable="item.path === 'name'"
:allow-create="item.path === 'name'"
:clearable="item.clearable"
@change="controlChange(item, $event)"
>
<el-option
v-for="(opt, key) in item.dict"
:key="key"
:value="item.path === 'name' ? opt.fieldes : key"
:label="item.path === 'name' ? `${opt.comment}(${opt.fieldes})` : opt"
/>
</el-select>
<el-switch <el-switch
v-else-if="item.type === 'switch'" v-else-if="item.type === 'switch'"
v-model="item.value" v-model="item.value"
@ -4488,6 +4620,8 @@ const radioChangeSet = (val: any) => {
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="表单配置" name="second"> <el-tab-pane label="表单配置" name="second">
{{ formData }}<br />
{{ formData.dataSource }}
<el-form size="small" class="form"> <el-form size="small" class="form">
<el-divider content-position="left">基础配置</el-divider> <el-divider content-position="left">基础配置</el-divider>
<el-form-item v-if="formConfig.classify != 4" class="form_cont"> <el-form-item v-if="formConfig.classify != 4" class="form_cont">
@ -4531,6 +4665,26 @@ const radioChangeSet = (val: any) => {
:value="formatNumber(opt.value ?? opt.id)" :value="formatNumber(opt.value ?? opt.id)"
/> />
</el-select> </el-select>
<div v-else-if="item.type === 'dataSourceSetup'">
<el-radio-group v-model="formData.dataSource" size="small">
<el-radio-button
v-for="optVal in item.options"
:label="optVal.label"
:value="optVal.value"
/>
<!-- <el-radio-button label="Washington" value="Washington" />
<el-radio-button label="Los Angeles" value="Los Angeles" />
<el-radio-button label="Chicago" value="Chicago" /> -->
</el-radio-group>
<div v-if="formData.dataSource == 'yes'" @click="openSetDataSource">
<el-text v-if="formData.dataSourceConfig.tableName != ''">
{{ formData.dataSourceConfig.dataBaseName }} /
{{ formData.dataSourceConfig.tableName }}
</el-text>
<el-text v-else>请选择数据源</el-text>
</div>
</div>
<el-switch <el-switch
v-else-if="item.type === 'switch'" v-else-if="item.type === 'switch'"
v-model="item.value" v-model="item.value"
@ -5666,4 +5820,9 @@ li::before {
padding: 0 5px; padding: 0 5px;
} }
} }
.contentBetween {
display: flex;
justify-content: space-between;
align-items: center;
}
</style> </style>

304
src/components/dataSource/index.vue

@ -0,0 +1,304 @@
<!--
@ 作者: 秦东
@ 时间: 2024-12-24 08:34:02
@ 备注: 数据源
-->
<script lang="ts" setup>
//
import { getOrPostDate, postSaveData, gainDataTable } from "@/api/date/apidate";
import {
dateTypes,
dataSourceTypes,
interfaceTypes,
dataBaseStruct,
gainDatabaseInfo,
havesDatabaseInfo,
fieldList,
} from "@/api/date/type";
import SvgIcon from "@/components/SvgIcon/index.vue";
const props = defineProps({
isShow: {
type: Boolean,
default: false,
},
dataInfo: {
type: Object,
default() {
return {};
},
},
});
const emits = defineEmits(["update:isShow", "closeDataSource", "updataBase"]);
//
const isOpen = computed({
get() {
if (props.isShow) {
gainDateList();
}
return props.isShow;
},
set(val: boolean) {
emits("update:isShow", val);
},
});
const fieldIsShow = ref(false);
const dataLoading = ref(false);
const dataList = ref<dataBaseStruct[]>([]);
const searchData = reactive({
pageNum: 1,
pageSize: 10,
databaseName: "",
dataType: "",
total: 0,
});
//
const dataBaseLiskt = reactive<gainDatabaseInfo>({
id: "",
type: "",
dataBaseName: "",
ip: "",
port: 0,
userName: "",
password: "",
});
const pickTable = reactive<havesDatabaseInfo>({
tableName: "",
tableKey: "",
fields: [],
});
const lookTable = reactive<havesDatabaseInfo>({
tableName: "",
tableKey: "",
fields: [],
});
const tableListField = ref<havesDatabaseInfo[]>([]);
const tableLoading = ref(false);
//
const getDatabaseTable = () => {
tableLoading.value = true;
gainDataTable(dataBaseLiskt)
.then((data) => {
tableListField.value = data.data;
})
.finally(() => {
tableLoading.value = false;
});
};
/**
@ 作者: 秦东
@ 时间: 2024-12-23 16:50:37
@ 功能: 获取数据源
*/
const gainDateList = () => {
dataLoading.value = true;
let sendData = {
url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/page",
methodType: "GET",
where:
"pageNum=" +
searchData.pageNum +
"&pageSize=" +
searchData.pageSize +
"&databaseName=" +
searchData.databaseName +
"&dataType=" +
searchData.dataType,
};
getOrPostDate("POST", sendData).then((data: any) => {
searchData.total = data.data.total;
if (data.data.records && data.data.records.length > 0) {
data.data.records.forEach((item: any) => {
dateTypes.forEach((items: any) => {
if (items.value == item.dataType) {
item.dataTypeName = items.label;
}
});
dataSourceTypes.forEach((itemsd: any) => {
if (itemsd.value == item.datasourceType) {
item.datasourceTypeName = itemsd.label;
}
});
interfaceTypes.forEach((interItem: any) => {
if (interItem.value == item.interfaceType) {
item.interfaceTypeName = interItem.label;
}
});
});
}
dataList.value = data.data.records;
// console.log("=====>",searchData)
dataLoading.value = false;
});
};
/**
@ 作者: 秦东
@ 时间: 2024-12-24 09:04:14
@ 功能: 关闭数据源选择
*/
const closeDataSourcePage = () => {
fieldIsShow.value = false;
lookTable.tableName = "";
lookTable.tableKey = "";
lookTable.fields = [];
};
/**
@ 作者: 秦东
@ 时间: 2024-12-24 09:38:31
@ 功能: 选择的数据源
*/
const handleCurrentChange = (val: dataBaseStruct) => {
console.log("选择的数据源", val);
dataBaseLiskt.id = val.id;
dataBaseLiskt.type = val.datasourceTypeName;
dataBaseLiskt.dataBaseName = val.databaseName;
dataBaseLiskt.dataTypeName = val.dataSourceDes;
dataBaseLiskt.ip = val.ipAddress;
dataBaseLiskt.port = val.port;
dataBaseLiskt.userName = val.account;
dataBaseLiskt.password = val.password;
getDatabaseTable();
};
/**
@ 作者: 秦东
@ 时间: 2024-12-26 09:09:31
@ 功能: 选择数据库表
*/
const handleChangeTable = (val: havesDatabaseInfo) => {
console.log("选择数据库表", val);
pickTable.tableName = val.tableName;
pickTable.tableKey = val.tableKey;
pickTable.fields = val.fields;
};
/**
@ 作者: 秦东
@ 时间: 2024-12-26 14:07:23
@ 功能: 查看表结构
*/
const lookTableField = (val: havesDatabaseInfo) => {
console.log("查看表结构", val);
lookTable.tableName = val.tableName;
lookTable.tableKey = val.tableKey;
lookTable.fields = val.fields;
fieldIsShow.value = true;
};
/**
@ 作者: 秦东
@ 时间: 2024-12-26 14:25:47
@ 功能: 关闭选择数据源
*/
const closeTableForm = () => {
lookTable.tableName = "";
lookTable.tableKey = "";
lookTable.fields = [];
tableListField.value = [];
dataList.value = [];
emits("closeDataSource", false);
};
//
const pickData = () => {
let databaseConfig = {
id: dataBaseLiskt.id,
dataBaseName: dataBaseLiskt.dataTypeName,
tableName: pickTable.tableName,
tableKey: pickTable.tableKey,
fields: pickTable.fields,
dsn: {
dataBaseName: dataBaseLiskt.dataBaseName,
ip: dataBaseLiskt.ip,
port: dataBaseLiskt.port,
userName: dataBaseLiskt.userName,
password: dataBaseLiskt.password,
},
};
emits("updataBase", databaseConfig);
closeTableForm();
};
</script>
<template>
<el-dialog
v-model="isOpen"
title="选择数据源"
width="800"
:before-close="closeTableForm"
draggable
>
<el-row :gutter="20">
<el-col :span="10">
<el-table
ref="singleTableRef"
:data="dataList"
highlight-current-row
style="width: 100%; height: 400px"
@row-click="handleCurrentChange"
small
border
>
<el-table-column property="databaseName" label="数据源" />
<el-table-column property="dataSourceDes" label="描述" />
</el-table>
<el-pagination
prev-text="上一页"
next-text="下一页"
layout="prev, next"
:total="searchData.total"
v-model:current-page="searchData.pageNum"
size="small"
/>
</el-col>
<el-col :span="14">
<el-table
ref="singleTableRef"
:data="tableListField"
highlight-current-row
style="width: 100%; height: 400px"
@row-click="handleChangeTable"
small
border
v-loading="tableLoading"
>
<el-table-column property="tableKey" label="数据表" />
<el-table-column property="tableName" label="描述" />
<el-table-column width="60" align="center" title="查看表结构">
<template #header> 操作 </template>
<template #default="scope">
<el-tooltip placement="right" content="查看表结构">
<svg-icon
icon-class="eye-open"
@click.native.stop="lookTableField(scope.row)"
/>
</el-tooltip>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeTableForm">取消</el-button>
<el-button type="primary" @click="pickData">确定</el-button>
</div>
</template>
<!--查看表结构-->
<el-dialog
v-model="fieldIsShow"
width="400"
:title="lookTable.tableName"
append-to-body
:before-close="closeDataSourcePage"
>
<el-table
:data="lookTable.fields"
style="width: 100%; height: 400px; min-height: 100px"
small
border
>
<el-table-column property="fieldes" label="字段" />
<el-table-column property="types" label="类型" />
<el-table-column property="comment" label="描述" />
</el-table>
</el-dialog>
</el-dialog>
</template>
<style lang="scss" scoped></style>

332
src/views/date/assets.vue

@ -3,161 +3,187 @@
@ 时间: 2024-04-18 14:52:06 @ 时间: 2024-04-18 14:52:06
@ 备注: 数据资源 @ 备注: 数据资源
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { getOrPostDate,postSaveData } from "@/api/date/apidate" import { getOrPostDate, postSaveData } from "@/api/date/apidate";
import { dateTypes,dataSourceTypes,interfaceTypes,dataBaseStruct } from "@/api/date/type" import {
dateTypes,
dataSourceTypes,
interfaceTypes,
dataBaseStruct,
} from "@/api/date/type";
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 11:50:16 @ 时间: 2024-04-19 11:50:16
@ 功能: 引入页面 @ 功能: 引入页面
*/ */
import EditAssets from "@/views/date/editAssets.vue" import EditAssets from "@/views/date/editAssets.vue";
const editAssetsOpen = ref(false) const editAssetsOpen = ref(false);
const editAssetsInfo = reactive<dataBaseStruct>({}) const editAssetsInfo = reactive<dataBaseStruct>({});
const dataLoading = ref(false) const dataLoading = ref(false);
const dataList = ref<dataBaseStruct[]>([]) const dataList = ref<dataBaseStruct[]>([]);
const searchData = reactive({ const searchData = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
databaseName:"", databaseName: "",
dataType:"", dataType: "",
total:0 total: 0,
}) });
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-18 14:57:24 @ 时间: 2024-04-18 14:57:24
@ 功能: 获取数据 @ 功能: 获取数据
*/ */
const gainDateList = () =>{ const gainDateList = () => {
dataLoading.value = true; dataLoading.value = true;
let sendData = { let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/page", url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/page",
methodType:"GET", methodType: "GET",
where:"pageNum="+searchData.pageNum+"&pageSize="+searchData.pageSize+"&databaseName="+searchData.databaseName+"&dataType="+searchData.dataType where:
"pageNum=" +
searchData.pageNum +
"&pageSize=" +
searchData.pageSize +
"&databaseName=" +
searchData.databaseName +
"&dataType=" +
searchData.dataType,
};
getOrPostDate("POST", sendData).then((data: any) => {
searchData.total = data.data.total;
if (data.data.records && data.data.records.length > 0) {
data.data.records.forEach((item: any) => {
dateTypes.forEach((items: any) => {
if (items.value == item.dataType) {
item.dataTypeName = items.label;
} }
getOrPostDate("POST",sendData) });
.then((data:any)=>{ dataSourceTypes.forEach((itemsd: any) => {
if (itemsd.value == item.datasourceType) {
searchData.total = data.data.total item.datasourceTypeName = itemsd.label;
if(data.data.records&&data.data.records.length > 0){
data.data.records.forEach((item:any)=>{
dateTypes.forEach((items:any)=>{
if(items.value == item.dataType){
item.dataTypeName = items.label
}
})
dataSourceTypes.forEach((itemsd:any)=>{
if(itemsd.value == item.datasourceType){
item.datasourceTypeName = itemsd.label
} }
}) });
interfaceTypes.forEach((interItem:any)=>{ interfaceTypes.forEach((interItem: any) => {
if(interItem.value == item.interfaceType){ if (interItem.value == item.interfaceType) {
item.interfaceTypeName = interItem.label item.interfaceTypeName = interItem.label;
} }
}) });
}) });
} }
dataList.value = data.data.records dataList.value = data.data.records;
// console.log("=====>",searchData) // console.log("=====>",searchData)
dataLoading.value = false dataLoading.value = false;
}) });
};
}
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 08:09:40 @ 时间: 2024-04-19 08:09:40
@ 功能: 判断数据库类型 @ 功能: 判断数据库类型
*/ */
function dataBaseType (val:any) { function dataBaseType(val: any) {
// console.log("-->",val,dateTypes,val.dataType) // console.log("-->",val,dateTypes,val.dataType)
let titleVal = "" let titleVal = "";
if(val.dataType){ if (val.dataType) {
try{ try {
dateTypes.forEach((item:any)=>{ dateTypes.forEach((item: any) => {
// console.log("-1->",item.value,val.dataType,item.value==val.dataType) // console.log("-1->",item.value,val.dataType,item.value==val.dataType)
if(item.value == val.dataType){ if (item.value == val.dataType) {
// console.log("-3->",item.value,val.dataType,item.value==val.dataType,item.label) // console.log("-3->",item.value,val.dataType,item.value==val.dataType,item.label)
titleVal = item.label titleVal = item.label;
// return item.label // return item.label
throw item.label throw item.label;
} }
}) });
} catch(e) { } catch (e) {
// console.log("-12->",e) // console.log("-12->",e)
} }
} }
// console.log("-2->",titleVal) // console.log("-2->",titleVal)
return titleVal return titleVal;
} }
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 09:21:09 @ 时间: 2024-04-19 09:21:09
@ 功能: 重置查询条件 @ 功能: 重置查询条件
*/ */
const resuct = () =>{ const resuct = () => {
searchData.pageNum=1 searchData.pageNum = 1;
searchData.pageSize=10 searchData.pageSize = 10;
searchData.databaseName="" searchData.databaseName = "";
searchData.dataType="" searchData.dataType = "";
gainDateList() gainDateList();
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 09:28:53 @ 时间: 2024-04-19 09:28:53
@ 功能: 选择每页显示几条数据 @ 功能: 选择每页显示几条数据
*/ */
const handleSizeChange = (val: number) => { const handleSizeChange = (val: number) => {
searchData.pageSize=val searchData.pageSize = val;
gainDateList() gainDateList();
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 09:28:53 @ 时间: 2024-04-19 09:28:53
@ 功能: 翻页操作 @ 功能: 翻页操作
*/ */
const handleCurrentChange = (val: number) => { const handleCurrentChange = (val: number) => {
searchData.pageNum=val searchData.pageNum = val;
gainDateList() gainDateList();
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 10:44:53 @ 时间: 2024-04-19 10:44:53
@ 功能: 连接 @ 功能: 连接
*/ */
const openLink = (val:any) => { const openLink = (val: any) => {
let sendData = { let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/test", url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/test",
methodType:"GET", methodType: "GET",
where:"databaseName="+val.databaseName+"&port="+val.port+"&ipAddress="+val.ipAddress+"&datasourceType="+val.datasourceType+"&dataType="+val.dataType+"&interfaceType="+val.interfaceType+"&account="+val.account+"&password="+val.password+"&id="+val.id+"&redashDatasourceId="+val.redashDatasourceId where:
} "databaseName=" +
val.databaseName +
"&port=" +
val.port +
"&ipAddress=" +
val.ipAddress +
"&datasourceType=" +
val.datasourceType +
"&dataType=" +
val.dataType +
"&interfaceType=" +
val.interfaceType +
"&account=" +
val.account +
"&password=" +
val.password +
"&id=" +
val.id +
"&redashDatasourceId=" +
val.redashDatasourceId,
};
// console.log("-1->",sendData) // console.log("-1->",sendData)
getOrPostDate("POST",sendData) getOrPostDate("POST", sendData).then((data: any) => {
.then((data:any)=>{
// console.log("-->",data) // console.log("-->",data)
if(data.code == 200){ if (data.code == 200) {
ElMessage.success(data.msg) ElMessage.success(data.msg);
}else{ } else {
ElMessage.error(data.msg) ElMessage.error(data.msg);
} }
gainDateList() gainDateList();
}) });
} };
onMounted(()=>{ onMounted(() => {
gainDateList();
gainDateList() });
})
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 11:54:12 @ 时间: 2024-04-19 11:54:12
@ 功能: 重置 @ 功能: 重置
*/ */
const resettingHandel = () => { const resettingHandel = () => {
editAssetsOpen.value = false editAssetsOpen.value = false;
editAssetsInfo.databaseName = ""; editAssetsInfo.databaseName = "";
editAssetsInfo.port = ""; editAssetsInfo.port = "";
editAssetsInfo.ipAddress = ""; editAssetsInfo.ipAddress = "";
@ -168,24 +194,24 @@ const resettingHandel = () => {
editAssetsInfo.password = ""; editAssetsInfo.password = "";
editAssetsInfo.id = ""; editAssetsInfo.id = "";
editAssetsInfo.redashDatasourceId = ""; editAssetsInfo.redashDatasourceId = "";
editAssetsInfo.author = "" editAssetsInfo.author = "";
gainDateList() gainDateList();
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 12:59:18 @ 时间: 2024-04-19 12:59:18
@ 功能: 新增数据源 @ 功能: 新增数据源
*/ */
const addDataBase = () => { const addDataBase = () => {
editAssetsInfo.id = "" editAssetsInfo.id = "";
editAssetsOpen.value = true editAssetsOpen.value = true;
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 13:35:02 @ 时间: 2024-04-19 13:35:02
@ 功能: 编辑数据源 @ 功能: 编辑数据源
*/ */
const editDataBase = (val:dataBaseStruct) => { const editDataBase = (val: dataBaseStruct) => {
editAssetsInfo.databaseName = val.databaseName; editAssetsInfo.databaseName = val.databaseName;
editAssetsInfo.port = val.port; editAssetsInfo.port = val.port;
editAssetsInfo.ipAddress = val.ipAddress; editAssetsInfo.ipAddress = val.ipAddress;
@ -196,49 +222,66 @@ const editDataBase = (val:dataBaseStruct) => {
editAssetsInfo.password = val.password; editAssetsInfo.password = val.password;
editAssetsInfo.id = val.id; editAssetsInfo.id = val.id;
editAssetsInfo.redashDatasourceId = val.redashDatasourceId; editAssetsInfo.redashDatasourceId = val.redashDatasourceId;
editAssetsInfo.author = val.author editAssetsInfo.author = val.author;
editAssetsOpen.value = true editAssetsInfo.dataSourceDes = val.dataSourceDes;
} editAssetsOpen.value = true;
};
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 14:26:27 @ 时间: 2024-04-19 14:26:27
@ 功能: 删除数据 @ 功能: 删除数据
*/ */
const delDataBase = (val:dataBaseStruct) => { const delDataBase = (val: dataBaseStruct) => {
ElMessageBox.confirm("确认删除<"+val.databaseName+">此数据项?一经删除!数据将不可恢复!", "警告", { ElMessageBox.confirm(
"确认删除<" + val.databaseName + ">此数据项?一经删除!数据将不可恢复!",
"警告",
{
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => {
let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/delete",
dataInfo:val
} }
postSaveData(sendData) ).then(() => {
.then((data:any)=>{ let sendData = {
if(data.code == 0){ url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/delete",
ElMessage.success(data.msg) dataInfo: val,
gainDateList() };
}else{ postSaveData(sendData).then((data: any) => {
ElMessage.error(data.msg) if (data.code == 0) {
ElMessage.success(data.msg);
gainDateList();
} else {
ElMessage.error(data.msg);
} }
})
}); });
} });
};
</script> </script>
<template> <template>
<div class="dataBox"> <div class="dataBox">
<EditAssets v-model:is-show="editAssetsOpen" :data-info="editAssetsInfo" @setResetting="resettingHandel" /> <EditAssets
v-model:is-show="editAssetsOpen"
:data-info="editAssetsInfo"
@setResetting="resettingHandel"
/>
<el-card style="width: 100%"> <el-card style="width: 100%">
<template #header> <template #header>
<div class="card_header"> <div class="card_header">
<div> <div>
<el-form :inline="true" :model="formInline" class="demo-form-inline"> <el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="数据源名称"> <el-form-item label="数据源名称">
<el-input v-model="searchData.databaseName" placeholder="请输入" clearable /> <el-input
v-model="searchData.databaseName"
placeholder="请输入"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="数据源类型"> <el-form-item label="数据源类型">
<el-select v-model="searchData.dataType" placeholder="请选择" clearable style="width: 180px;"> <el-select
v-model="searchData.dataType"
placeholder="请选择"
clearable
style="width: 180px"
>
<el-option <el-option
v-for="item in dateTypes" v-for="item in dateTypes"
:key="item.value" :key="item.value"
@ -250,23 +293,34 @@ const delDataBase = (val:dataBaseStruct) => {
</el-form> </el-form>
</div> </div>
<div> <div>
<el-button type="primary" @click="gainDateList"><el-space wrap><i class="fa fa-search "></i>查询</el-space></el-button> <el-button type="primary" @click="gainDateList"
><el-space wrap><i class="fa fa-search"></i>查询</el-space></el-button
>
<el-button plain @click="resuct">重置</el-button> <el-button plain @click="resuct">重置</el-button>
</div> </div>
</div> </div>
</template> </template>
<el-row class="newAddBox"> <el-row class="newAddBox">
<el-col :span="24"> <el-col :span="24">
<el-button type="primary" @click="addDataBase"><el-space wrap><i class="fa fa-plus "></i>新增数据源</el-space></el-button> <el-button type="primary" @click="addDataBase"
><el-space wrap><i class="fa fa-plus"></i>新增数据源</el-space></el-button
>
<el-button plain>导出数据源</el-button> <el-button plain>导出数据源</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table :data="dataList" v-loading="dataLoading" stripe :header-cell-style="{'background':'#f5f8fd'}" style="width: 100%"> <el-table
:data="dataList"
v-loading="dataLoading"
stripe
:header-cell-style="{ background: '#f5f8fd' }"
style="width: 100%"
>
<el-table-column fixed type="selection" width="50" align="center" /> <el-table-column fixed type="selection" width="50" align="center" />
<el-table-column fixed label="序号" type="index" width="60" align="center" /> <el-table-column fixed label="序号" type="index" width="60" align="center" />
<el-table-column prop="datasourceTypeName" label="数据库产品" width="120" /> <el-table-column prop="datasourceTypeName" label="数据库产品" width="120" />
<el-table-column prop="dataTypeName" label="数据库类型" width="160" /> <el-table-column prop="dataTypeName" label="数据库类型" width="160" />
<el-table-column prop="databaseName" label="数据库名称" width="160" /> <el-table-column prop="databaseName" label="数据库名称" width="160" />
<el-table-column prop="dataSourceDes" label="描述" width="160" />
<el-table-column prop="interfaceTypeName" label="接口方式" width="100" /> <el-table-column prop="interfaceTypeName" label="接口方式" width="100" />
<el-table-column prop="ipAddress" label="IP地址" width="160" /> <el-table-column prop="ipAddress" label="IP地址" width="160" />
<el-table-column prop="port" label="端口" align="center" /> <el-table-column prop="port" label="端口" align="center" />
@ -274,25 +328,29 @@ const delDataBase = (val:dataBaseStruct) => {
<el-table-column prop="author" label="帐号权限" width="100" align="center" /> <el-table-column prop="author" label="帐号权限" width="100" align="center" />
<el-table-column prop="status" label="状态" width="100" align="center"> <el-table-column prop="status" label="状态" width="100" align="center">
<template #default="scope"> <template #default="scope">
<el-text v-if="scope.row.status==1" class="mx-1" type="primary">已连接</el-text> <el-text v-if="scope.row.status == 1" class="mx-1" type="primary"
>已连接</el-text
>
<el-text v-else class="mx-1" type="danger">连接失败</el-text> <el-text v-else class="mx-1" type="danger">连接失败</el-text>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" width="250" align="center"> <el-table-column fixed="right" label="操作" width="250" align="center">
<template #default="scope"> <template #default="scope">
<el-button class="oper-btn" plain @click="openLink(scope.row)">连接</el-button> <el-button class="oper-btn" plain @click="openLink(scope.row)"
<el-button class="oper-btn" plain @click="editDataBase(scope.row)">编辑</el-button> >连接</el-button
<el-button class="oper-btn" plain @click="delDataBase(scope.row)">删除</el-button> >
<el-button class="oper-btn" plain @click="editDataBase(scope.row)"
>编辑</el-button
>
<el-button class="oper-btn" plain @click="delDataBase(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-row> <el-row>
<el-col :span="24" class="pageSetUp"> <el-col :span="24" class="pageSetUp">
<el-pagination <el-pagination :small="small" :total="searchData.total" layout="total" />
:small="small"
:total="searchData.total"
layout="total"
/>
<el-pagination <el-pagination
v-model:current-page="searchData.pageNum" v-model:current-page="searchData.pageNum"
v-model:page-size="searchData.pageSize" v-model:page-size="searchData.pageSize"
@ -309,24 +367,24 @@ const delDataBase = (val:dataBaseStruct) => {
</el-card> </el-card>
</div> </div>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.dataBox{ .dataBox {
padding: 10px; padding: 10px;
.el-table .el-table__header td { .el-table .el-table__header td {
background:#f5f8fd; background: #f5f8fd;
} }
.newAddBox{ .newAddBox {
margin-bottom: 20px; margin-bottom: 20px;
} }
.card_header{ .card_header {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.el-form-item{ .el-form-item {
margin-bottom: 0px; margin-bottom: 0px;
} }
.pageSetUp{ .pageSetUp {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@ -334,9 +392,9 @@ const delDataBase = (val:dataBaseStruct) => {
height: 55px; height: 55px;
} }
} }
.oper-btn{ .oper-btn {
background: rgba(61,127,255,0.1); background: rgba(61, 127, 255, 0.1);
border: 1px solid rgba(61,127,255,0.6); border: 1px solid rgba(61, 127, 255, 0.6);
color: #3D7FFF; color: #3d7fff;
} }
</style> </style>

217
src/views/date/editAssets.vue

@ -3,51 +3,57 @@
@ 时间: 2024-04-19 11:37:41 @ 时间: 2024-04-19 11:37:41
@ 备注: 编辑数据源 @ 备注: 编辑数据源
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { dateTypes,dataSourceTypes,interfaceTypes,dataBaseStruct } from "@/api/date/type" import {
import { getOrPostDate,postSaveData } from "@/api/date/apidate" dateTypes,
dataSourceTypes,
interfaceTypes,
dataBaseStruct,
} from "@/api/date/type";
import { getOrPostDate, postSaveData } from "@/api/date/apidate";
const props = defineProps({ const props = defineProps({
isShow:{ isShow: {
type:Boolean, type: Boolean,
default:false default: false,
},
dataInfo: {
type: Object,
default() {
return {};
},
}, },
dataInfo:{
type:Object,
default(){
return {}
}
}
}); });
const ruleFormRef = ref(ElForm); // const ruleFormRef = ref(ElForm); //
const formData = reactive<dataBaseStruct>({}) const formData = reactive<dataBaseStruct>({});
const emits = defineEmits(["update:isShow","setResetting"]); const emits = defineEmits(["update:isShow", "setResetting"]);
const tipTitle = ref("增加数据源") const tipTitle = ref("增加数据源");
const isOpen = computed({ const isOpen = computed({
get() { get() {
if(props.isShow){ if (props.isShow) {
formData.id = props.dataInfo.id formData.id = props.dataInfo.id;
formData.databaseName = props.dataInfo.databaseName; formData.databaseName = props.dataInfo.databaseName;
formData.port = props.dataInfo.port; formData.port = props.dataInfo.port;
formData.ipAddress = props.dataInfo.ipAddress; formData.ipAddress = props.dataInfo.ipAddress;
formData.datasourceType = props.dataInfo.datasourceType; formData.datasourceType = props.dataInfo.datasourceType;
formData.dataType = props.dataInfo.dataType; formData.dataType = props.dataInfo.dataType;
formData.interfaceType = props.dataInfo.interfaceType; formData.interfaceType = props.dataInfo.interfaceType;
formData.author = props.dataInfo.author formData.author = props.dataInfo.author;
formData.account = props.dataInfo.account; formData.account = props.dataInfo.account;
formData.password = props.dataInfo.password; formData.password = props.dataInfo.password;
formData.id = props.dataInfo.id; formData.id = props.dataInfo.id;
formData.dataSourceDes = props.dataInfo.dataSourceDes;
formData.redashDatasourceId = props.dataInfo.redashDatasourceId; formData.redashDatasourceId = props.dataInfo.redashDatasourceId;
if(props.dataInfo.id && props.dataInfo.id != ""){ if (props.dataInfo.id && props.dataInfo.id != "") {
tipTitle.value = "编辑数据源" tipTitle.value = "编辑数据源";
} }
} }
return props.isShow return props.isShow;
}, },
set(val: boolean) { set(val: boolean) {
emits('update:isShow', val) emits("update:isShow", val);
} },
}); });
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ -55,8 +61,8 @@ const isOpen = computed({
@ 功能: 关闭 @ 功能: 关闭
*/ */
const handleClose = () => { const handleClose = () => {
emits('setResetting') emits("setResetting");
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 13:08:37 @ 时间: 2024-04-19 13:08:37
@ -64,45 +70,42 @@ const handleClose = () => {
*/ */
const saveData = () => { const saveData = () => {
ruleFormRef.value.validate((valid: any) => { ruleFormRef.value.validate((valid: any) => {
if (valid){ if (valid) {
if (formData.id != "" && formData.id != 0 && formData.id != "0") {
if(formData.id != "" && formData.id != 0 && formData.id != "0"){ // //
// console.log("---->--->",formData); // console.log("---->--->",formData);
let sendData = { let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/update", url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/update",
dataInfo:formData dataInfo: formData,
} };
// console.log("---->-1-->",sendData); // console.log("---->-1-->",sendData);
postSaveData(sendData) postSaveData(sendData).then((data: any) => {
.then((data:any)=>{ if (data.code == 0) {
if(data.code == 0){ ElMessage.success(data.msg);
ElMessage.success(data.msg) handleClose();
handleClose() } else {
}else{ ElMessage.error(data.msg);
ElMessage.error(data.msg)
} }
}) });
} else {
}else{ // //
// console.log("---->--->",formData); // console.log("---->--->",formData);
let sendData = { let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/save", url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/save",
dataInfo:formData dataInfo: formData,
} };
postSaveData(sendData) postSaveData(sendData).then((data: any) => {
.then((data:any)=>{ if (data.code == 0) {
if(data.code == 0){ ElMessage.success(data.msg);
ElMessage.success(data.msg) handleClose();
handleClose() } else {
}else{ ElMessage.error(data.msg);
ElMessage.error(data.msg)
} }
}) });
} }
} }
}); });
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 13:09:12 @ 时间: 2024-04-19 13:09:12
@ -110,26 +113,44 @@ const saveData = () => {
*/ */
const openLink = () => { const openLink = () => {
ruleFormRef.value.validate((valid: any) => { ruleFormRef.value.validate((valid: any) => {
if (valid){ if (valid) {
let sendData = { let sendData = {
url:import.meta.env.VITE_APP_SJZT_URL+"/database/app/datasource/test", url: import.meta.env.VITE_APP_SJZT_URL + "/database/app/datasource/test",
methodType:"GET", methodType: "GET",
where:"databaseName="+formData.databaseName+"&port="+formData.port+"&ipAddress="+formData.ipAddress+"&datasourceType="+formData.datasourceType+"&dataType="+formData.dataType+"&interfaceType="+formData.interfaceType+"&account="+formData.account+"&password="+formData.password+"&id="+formData.id+"&redashDatasourceId="+formData.redashDatasourceId where:
} "databaseName=" +
formData.databaseName +
"&port=" +
formData.port +
"&ipAddress=" +
formData.ipAddress +
"&datasourceType=" +
formData.datasourceType +
"&dataType=" +
formData.dataType +
"&interfaceType=" +
formData.interfaceType +
"&account=" +
formData.account +
"&password=" +
formData.password +
"&id=" +
formData.id +
"&redashDatasourceId=" +
formData.redashDatasourceId,
};
// console.log("-1->",sendData) // console.log("-1->",sendData)
getOrPostDate("POST",sendData) getOrPostDate("POST", sendData).then((data: any) => {
.then((data:any)=>{
// console.log("-->",data) // console.log("-->",data)
if(data.code == 200){ if (data.code == 200) {
ElMessage.success(data.msg) ElMessage.success(data.msg);
}else{ } else {
ElMessage.error(data.msg) ElMessage.error(data.msg);
} }
}) });
} }
}); });
};
}
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-19 13:13:18 @ 时间: 2024-04-19 13:13:18
@ -145,16 +166,10 @@ const dataFormRules = reactive({
author: [{ required: true, message: "请输入账号权限", trigger: "blur" }], author: [{ required: true, message: "请输入账号权限", trigger: "blur" }],
account: [{ required: true, message: "请输入账号", trigger: "blur" }], account: [{ required: true, message: "请输入账号", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }], password: [{ required: true, message: "请输入密码", trigger: "blur" }],
}) });
</script> </script>
<template> <template>
<el-dialog <el-dialog v-model="isOpen" :title="tipTitle" width="50%" :before-close="handleClose">
v-model="isOpen"
:title="tipTitle"
width="50%"
:before-close="handleClose"
>
<el-form <el-form
ref="ruleFormRef" ref="ruleFormRef"
style="width: 100%" style="width: 100%"
@ -166,7 +181,12 @@ const dataFormRules = reactive({
<el-row gutter="20"> <el-row gutter="20">
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据库产品:" prop="datasourceType"> <el-form-item label="数据库产品:" prop="datasourceType">
<el-select v-model="formData.datasourceType" placeholder="请选择数据库产品" style="width: 240px" clearable > <el-select
v-model="formData.datasourceType"
placeholder="请选择数据库产品"
style="width: 240px"
clearable
>
<el-option <el-option
v-for="item in dataSourceTypes" v-for="item in dataSourceTypes"
:key="item.value" :key="item.value"
@ -178,7 +198,7 @@ const dataFormRules = reactive({
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据类型:" prop="dataType"> <el-form-item label="数据类型:" prop="dataType">
<el-select v-model="formData.dataType" placeholder="请选择数据类型" clearable > <el-select v-model="formData.dataType" placeholder="请选择数据类型" clearable>
<el-option <el-option
v-for="item in dateTypes" v-for="item in dateTypes"
:key="item.value" :key="item.value"
@ -190,12 +210,29 @@ const dataFormRules = reactive({
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据库名称:" prop="databaseName"> <el-form-item label="数据库名称:" prop="databaseName">
<el-input v-model="formData.databaseName" placeholder="请输入数据库名称" clearable /> <el-input
v-model="formData.databaseName"
placeholder="请输入数据库名称"
clearable
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="数据库描述:" prop="dataSourceDes">
<el-input
v-model="formData.dataSourceDes"
placeholder="请输入数据库描述"
clearable
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="接口方式:" prop="interfaceType"> <el-form-item label="接口方式:" prop="interfaceType">
<el-select v-model="formData.interfaceType" placeholder="请选择接口方式" clearable > <el-select
v-model="formData.interfaceType"
placeholder="请选择接口方式"
clearable
>
<el-option <el-option
v-for="item in interfaceTypes" v-for="item in interfaceTypes"
:key="item.value" :key="item.value"
@ -222,12 +259,24 @@ const dataFormRules = reactive({
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="账号:" prop="account"> <el-form-item label="账号:" prop="account">
<el-input v-model="formData.account" placeholder="请输入账号" clearable autocomplete="off" /> <el-input
v-model="formData.account"
placeholder="请输入账号"
clearable
autocomplete="off"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
<el-form-item label="密码:" prop="password"> <el-form-item label="密码:" prop="password">
<el-input type="new-password" show-password v-model="formData.password" placeholder="请输入密码" clearable autocomplete="off" /> <el-input
type="new-password"
show-password
v-model="formData.password"
placeholder="请输入密码"
clearable
autocomplete="off"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -241,6 +290,4 @@ const dataFormRules = reactive({
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped></style>
</style>

2
src/views/sysworkflow/codepage/index.ts

@ -5,6 +5,7 @@ import Screen from '@/components/DesignForm/public/form/components/screen.vue'
import akPageList from '@/components/DesignForm/tableListPage/index.vue' import akPageList from '@/components/DesignForm/tableListPage/index.vue'
import AppPageList from '@/components/DesignForm/app/index.vue' import AppPageList from '@/components/DesignForm/app/index.vue'
import AppFormPage from '@/components/DesignForm/app/formPage.vue' import AppFormPage from '@/components/DesignForm/app/formPage.vue'
import DataSourcePage from '@/components/dataSource/index.vue'
export default (app: any) => { export default (app: any) => {
app.component('AkForm', formDesign) app.component('AkForm', formDesign)
@ -14,4 +15,5 @@ export default (app: any) => {
app.component('AkPageList', akPageList) app.component('AkPageList', akPageList)
app.component('AppPageList', AppPageList) app.component('AppPageList', AppPageList)
app.component('AppFormPage', AppFormPage) app.component('AppFormPage', AppFormPage)
app.component('DataSourcePage', DataSourcePage)
} }

299
src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue

@ -3,90 +3,104 @@
@ 时间: 2024-05-07 11:26:40 @ 时间: 2024-05-07 11:26:40
@ 备注: 编辑表单 @ 备注: 编辑表单
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
import { formStruct } from '@/api/DesignForm/types' import { formStruct } from "@/api/DesignForm/types";
import { customerFormConfig } from '@/api/DesignForm/type' import { customerFormConfig } from "@/api/DesignForm/type";
import { getProductionMarkForm } from '@/api/DesignForm/requestapi' import { getProductionMarkForm } from "@/api/DesignForm/requestapi";
import PageForm from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue" import PageForm from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue";
import PageFlow from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue" import PageFlow from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue";
import PageList from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue" import PageList from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue";
const props = defineProps({ const props = defineProps({
appCont:{ appCont: {
type:Object, type: Object,
default(){ default() {
return {} return {};
} },
}, },
isShow:{ isShow: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
isNew:{ isNew: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
drawerWith:{ drawerWith: {
type:Number, type: Number,
default:0 default: 0,
}, },
formKey:{ formKey: {
type:String, type: String,
default:"" default: "",
}, },
groupKey:{ groupKey: {
type:String, type: String,
default:"" default: "",
}, },
menuId:{ menuId: {
type:String, type: String,
default:"" default: "",
},
appPageKey: {
type: String,
default: "",
}, },
appPageKey:{
type:String,
default:""
}
}); });
const emits = defineEmits(["update:isShow","update:isNew","update:appPageKey","gainSunAppContent","updateInit"]); const emits = defineEmits([
const tabsActive = ref(1) "update:isShow",
const route: any = useRoute().query || {} "update:isNew",
"update:appPageKey",
"gainSunAppContent",
"updateInit",
]);
const tabsActive = ref(1);
const route: any = useRoute().query || {};
const formConfigCont = reactive<customerFormConfig>({ const formConfigCont = reactive<customerFormConfig>({
formName:"", formName: "",
formlogo:"", formlogo: "",
signCode:"" signCode: "",
}) });
const appPageKey = computed({ const appPageKey = computed({
get() { get() {
return props.appPageKey return props.appPageKey;
}, },
set(val: any) { set(val: any) {
emits('update:appPageKey', val) emits("update:appPageKey", val);
} },
}); });
//ID //ID
const formVersion = ref<string>("") const formVersion = ref<string>("");
const formPageId = ref<string>("") const formPageId = ref<string>("");
const state = reactive<formStruct>({ const state = reactive<formStruct>({
formData: { formData: {
list: [], list: [],
form: { form: {
size: 'default', size: "default",
name:'', name: "",
formName: formConfigCont.formName, formName: formConfigCont.formName,
dataTitle: [], dataTitle: [],
labelPosition: "left" labelPosition: "left",
dataSource: "no",
dataSourceConfig: {
id: "",
dataBaseName: "",
tableName: "",
tableKey: "",
dsn: {},
},
}, },
config: { config: {
groupKey:props.formKey, groupKey: props.formKey,
classify:4 classify: 4,
}, },
styles:{ styles: {
divStyle:{}, divStyle: {},
labelStyle:{}, labelStyle: {},
inputStyle:{} inputStyle: {},
}, },
purview:[] purview: [],
}, },
editor: {}, editor: {},
loading: false, loading: false,
@ -95,73 +109,76 @@ const state = reactive<formStruct>({
designType: route.type, // search designType: route.type, // search
formDict: {}, formDict: {},
formOtherData: { formOtherData: {
source: route.source || '', source: route.source || "",
formName: formConfigCont.formName formName: formConfigCont.formName,
} },
}) });
const appPageInfo = ref() const appPageInfo = ref();
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-05-07 15:11:24 @ 时间: 2024-05-07 15:11:24
@ 功能: 关闭页面 @ 功能: 关闭页面
*/ */
const closeSavePageForm = () =>{ const closeSavePageForm = () => {
emits("update:isShow",false) emits("update:isShow", false);
emits("gainSunAppContent") emits("gainSunAppContent");
emits("updateInit") emits("updateInit");
emits("update:isNew",false) emits("update:isNew", false);
// console.log("appPageInfo.value",appPageInfo.value) // console.log("appPageInfo.value",appPageInfo.value)
if(tabsActive.value == 1){ if (tabsActive.value == 1) {
appPageInfo.value.gainTableForm() appPageInfo.value.gainTableForm();
} }
};
}
onBeforeMount(() => { onBeforeMount(() => {
// console.log("onBeforeMount",props.isNew) // console.log("onBeforeMount",props.isNew)
// console.log("onBeforeMount--->appPageKey",props.appPageKey) // console.log("onBeforeMount--->appPageKey",props.appPageKey)
let send = { let send = {
types:3 types: 3,
} };
if(props.isNew){ if (props.isNew) {
props.appPageKey = "" props.appPageKey = "";
state.formData.list= [] state.formData.list = [];
formVersion.value = "" formVersion.value = "";
appPageKey.value = "" appPageKey.value = "";
getProductionMarkForm(send) getProductionMarkForm(send)
.then(({data})=>{ .then(({ data }) => {
formConfigCont.formlogo = data.formlogo formConfigCont.formlogo = data.formlogo;
formConfigCont.formName = data.formname formConfigCont.formName = data.formname;
formConfigCont.signCode = data.signCode formConfigCont.signCode = data.signCode;
state.formData.form.name = data.formlogo state.formData.form.name = data.formlogo;
state.formData.form.formName = data.formname state.formData.form.formName = data.formname;
state.formOtherData.formName = data.formname state.formOtherData.formName = data.formname;
})
.finally(()=>{
}) })
.finally(() => {});
} }
// console.log("onBeforeMount",props.isNew) // console.log("onBeforeMount",props.isNew)
// console.log("onBeforeMount--2->appPageKey",props.appPageKey) // console.log("onBeforeMount--2->appPageKey",props.appPageKey)
if(props.appPageKey == ""){ if (props.appPageKey == "") {
getProductionMarkForm(send) getProductionMarkForm(send)
.then(({data})=>{ .then(({ data }) => {
formConfigCont.formlogo = data.formlogo formConfigCont.formlogo = data.formlogo;
formConfigCont.formName = data.formname formConfigCont.formName = data.formname;
formConfigCont.signCode = data.signCode formConfigCont.signCode = data.signCode;
state.formData.form.name = data.formlogo state.formData.form.name = data.formlogo;
state.formData.form.formName = data.formname state.formData.form.formName = data.formname;
state.formOtherData.formName = data.formname state.formOtherData.formName = data.formname;
})
.finally(()=>{
}) })
.finally(() => {});
} }
// console.log("state------------>",state) // console.log("state------------>",state)
}) });
</script> </script>
<template> <template>
<el-drawer v-model="props.isShow" title="设置/编辑自定义表单" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith"> <el-drawer
v-model="props.isShow"
title="设置/编辑自定义表单"
:with-header="false"
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
:size="props.drawerWith"
>
<div class="common-layout"> <div class="common-layout">
<el-container> <el-container>
<el-header class="headerBox"> <el-header class="headerBox">
@ -174,7 +191,9 @@ onBeforeMount(() => {
:content="props.appCont.appName" :content="props.appCont.appName"
placement="bottom" placement="bottom"
> >
<el-text class="w-150px mb-2" truncated>{{ props.appCont.appName }}</el-text> <el-text class="w-150px mb-2" truncated>{{
props.appCont.appName
}}</el-text>
</el-tooltip> </el-tooltip>
<i class="fa fa-angle-right"></i> <i class="fa fa-angle-right"></i>
<el-tooltip <el-tooltip
@ -183,64 +202,98 @@ onBeforeMount(() => {
:content="state.formData.form.formName" :content="state.formData.form.formName"
placement="bottom" placement="bottom"
> >
<el-text class="w-150px mb-2" truncated>{{ state.formData.form.formName }}</el-text> <el-text class="w-150px mb-2" truncated>{{
state.formData.form.formName
}}</el-text>
</el-tooltip> </el-tooltip>
</el-space> </el-space>
</div> </div>
<div> <div>
<el-tabs v-model="tabsActive" @tab-click="handleClick" :stretch="true" class="tabsMain"> <el-tabs
<el-tab-pane label="① 页面管理" :name="1"> v-model="tabsActive"
</el-tab-pane> @tab-click="handleClick"
<el-tab-pane label="② 流程设计" :name="2"> :stretch="true"
</el-tab-pane> class="tabsMain"
<el-tab-pane label="③ 列表设计" :name="3"> >
</el-tab-pane> <el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane>
<el-tab-pane label="② 流程设计" :name="2"> </el-tab-pane>
<el-tab-pane label="③ 列表设计" :name="3"> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<div class="headRight"> <div class="headRight">
<el-button type="danger" size="small" @click="closeSavePageForm" >关闭</el-button> <el-button type="danger" size="small" @click="closeSavePageForm"
>关闭</el-button
>
</div> </div>
</el-header> </el-header>
<el-container> <el-container>
<PageForm ref="appPageInfo" v-if="tabsActive==1" :form-Key="props.formKey" :app-cont="props.appCont" :menu-id="menuId" :group-key="props.groupKey" v-model:state="state" v-model:form-version="formVersion" :formconfigcont="formConfigCont" v-model:app-page-key="appPageKey" /> <PageForm
<PageFlow v-if="tabsActive==2" v-model:state="state" :form-Key="props.formKey" :app-cont="props.appCont" :menu-id="menuId" :group-key="props.groupKey" v-model:app-page-key="appPageKey" v-model:form-version="formVersion" /> ref="appPageInfo"
<PageList v-if="tabsActive==3" v-model:state="state" :form-Key="props.formKey" :app-cont="props.appCont" :menu-id="menuId" :group-key="props.groupKey" v-model:app-page-key="appPageKey" v-model:form-version="formVersion" /> v-if="tabsActive == 1"
:form-Key="props.formKey"
:app-cont="props.appCont"
:menu-id="menuId"
:group-key="props.groupKey"
v-model:state="state"
v-model:form-version="formVersion"
:formconfigcont="formConfigCont"
v-model:app-page-key="appPageKey"
/>
<PageFlow
v-if="tabsActive == 2"
v-model:state="state"
:form-Key="props.formKey"
:app-cont="props.appCont"
:menu-id="menuId"
:group-key="props.groupKey"
v-model:app-page-key="appPageKey"
v-model:form-version="formVersion"
/>
<PageList
v-if="tabsActive == 3"
v-model:state="state"
:form-Key="props.formKey"
:app-cont="props.appCont"
:menu-id="menuId"
:group-key="props.groupKey"
v-model:app-page-key="appPageKey"
v-model:form-version="formVersion"
/>
</el-container> </el-container>
</el-container> </el-container>
</div> </div>
</el-drawer> </el-drawer>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.headerBox{ .headerBox {
padding: 0px; padding: 0px;
border-bottom: 2px solid #ECECEC; border-bottom: 2px solid #ececec;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.headLeft{ .headLeft {
width: 300px; width: 300px;
padding-left: 5px; padding-left: 5px;
span{ span {
max-width:100px; max-width: 100px;
} }
} }
.headRight{ .headRight {
width: 300px; width: 300px;
text-align: right; text-align: right;
padding-right: 5px; padding-right: 5px;
} }
.tabsMain{ .tabsMain {
::v-deep .el-tabs__header{ ::v-deep .el-tabs__header {
margin: 0px; margin: 0px;
} }
::v-deep .el-tabs__nav-scroll{ ::v-deep .el-tabs__nav-scroll {
margin: 0 auto!important; margin: 0 auto !important;
} }
::v-deep .el-drawer__body{ ::v-deep .el-drawer__body {
padding: 0; padding: 0;
} }
} }
} }
</style> </style>

Loading…
Cancel
Save