李胜楠 1 year ago
parent
commit
f64f8d3f30
  1. 7
      .env.test
  2. 2
      src/components/Annex/src/Annex.vue
  3. 4
      src/components/ChangeRecord/src/ChangeRecord.vue
  4. 13
      src/components/Detail/src/Detail.vue
  5. 2
      src/components/Remarks/src/Remarks.vue
  6. 358
      src/components/TableForm/src/TableForm.vue
  7. 2
      src/components/Tabs/src/Tabs.vue
  8. 2
      src/store/modules/app.ts
  9. 26
      src/utils/disposition/tableColumns.ts
  10. 179
      src/views/detail/detail/index.vue
  11. 4
      src/views/infra/customInterface/index.vue
  12. 67
      src/views/wms/itembasic/ItembasicForm.vue

7
.env.test

@ -4,10 +4,10 @@ NODE_ENV=test
VITE_DEV=false VITE_DEV=false
# 请求路径 # 请求路径
VITE_BASE_URL='http://dev.ccwin-in.com:25100/api' VITE_BASE_URL='http://dev.ccwin-in.com:25110'
# 上传路径 # 上传路径
VITE_UPLOAD_URL='http://dev.ccwin-in.com:25100/api/admin-api/infra/file/upload' VITE_UPLOAD_URL='http://dev.ccwin-in.com:25110/admin-api/infra/file/upload'
# 接口前缀 # 接口前缀
VITE_API_BASEPATH= VITE_API_BASEPATH=
@ -29,3 +29,6 @@ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=dist-test VITE_OUT_DIR=dist-test
# 自定义接口路径
VITE_INTERFACE_URL='http://dev.ccwin-in.com:25110/magic/web/index.html'

2
src/components/Annex/src/Annex.vue

@ -32,7 +32,7 @@ defineComponent({
name: 'Annex' name: 'Annex'
}) })
// //
const { data } = defineProps({ const props = defineProps({
data: { data: {
type: Object, type: Object,
required: true required: true

4
src/components/ChangeRecord/src/ChangeRecord.vue

@ -52,10 +52,10 @@
<script lang="ts" setup> <script lang="ts" setup>
import download from '@/utils/download' import download from '@/utils/download'
defineComponent({ defineComponent({
name: 'Annex' name: 'ChangeRecord'
}) })
// //
const { data } = defineProps({ const props = defineProps({
data: { data: {
type: Object, type: Object,
required: true required: true

13
src/components/Detail/src/Detail.vue

@ -6,13 +6,13 @@
</div> </div>
</template> </template>
<ContentWrap v-if="!isBasic"> <ContentWrap v-if="!isBasic">
<Descriptions :data="detailData" labelClassName="label-class-name" label-align="left" direction="vertical" :column="8" :schema="detailSchema" :columns="2" width="200px"/> <Descriptions :data="detailData" labelClassName="label-class-name" label-align="left" direction="vertical" :column="8" :schema="allSchemas.detailSchema" :columns="2" width="200px"/>
</ContentWrap> </ContentWrap>
<Tabs :tabsList="tabsList" :current="current" @change="change" /> <Tabs :tabsList="tabsList" :current="current" @change="change" />
<div class="flex" v-if="current == 0"> <div class="flex" v-if="current == 0">
<!-- 详情 --> <!-- 详情 -->
<ContentWrap class="w-[73%]"> <ContentWrap class="w-[73%]">
<Descriptions :data="detailData" :schema="detailSchema" :columns="2" /> <Descriptions :data="detailData" :schema="allSchemas.detailSchema" :columns="2" />
</ContentWrap> </ContentWrap>
<ContentWrap class="w-[27%] ml-16px"> <ContentWrap class="w-[27%] ml-16px">
<!-- 附件组件 --> <!-- 附件组件 -->
@ -25,7 +25,7 @@
</div> </div>
<ContentWrap v-else> <ContentWrap v-else>
<Table <Table
:columns="tableColumns" :columns="allSchemas.tableColumns"
:data="tableObject.tableList" :data="tableObject.tableList"
:loading="tableObject.loading" :loading="tableObject.loading"
:pagination="{total: tableObject.total}" :pagination="{total: tableObject.total}"
@ -83,20 +83,17 @@ const props = defineProps({
}) })
const isShowDrawer = ref(false) const isShowDrawer = ref(false)
const isBasic = ref(props.isBasic)
const tableColumns = ref(props.allSchemas.tableColumns)
const detailSchema = ref(props.allSchemas.detailSchema)
const tabsList = ref(JSON.parse(JSON.stringify(props.tabs?props.tabs:''))) const tabsList = ref(JSON.parse(JSON.stringify(props.tabs?props.tabs:'')))
if (tabsList.value) { if (tabsList.value&& tabsList.value.length>0) {
tabsList.value.unshift({ tabsList.value.unshift({
label: '详情', label: '详情',
prop: 'Detail' prop: 'Detail'
}) })
} else { } else {
tabsList.value = [{ tabsList.value = [{
label: '详情', label: '明细',
prop: 'Detail' prop: 'Detail'
}] }]
} }

2
src/components/Remarks/src/Remarks.vue

@ -37,7 +37,7 @@ defineComponent({
const remark = ref('') const remark = ref('')
// //
const { data } = defineProps({ const props = defineProps({
data: { data: {
type: Object, type: Object,
required: true required: true

358
src/components/TableForm/src/TableForm.vue

@ -1,25 +1,33 @@
<!-- 附件组件 --> <!-- 附件组件 -->
<template> <template>
<div class="table-form"> <div class="table-form">
<el-table <el-table class="multipleTableComponents"
class="multipleTableComponents"
ref="TableBaseComponents_Ref" ref="TableBaseComponents_Ref"
v-loading="tableLoading" v-loading="tableLoading"
:data="tableData" :data="tableData"
:height="height" max-height="maxHeight"
row-key="id" row-key="id"
:border="border" :border="border"
@selection-change="tableSelectionChange" @selection-change="tableSelectionChange"
@sort-change="tableSortChange" @sort-change="tableSortChange"
@row-click="handleTableSelect" @row-click="handleTableSelect"
style="{width:100%}"
> >
<!-- 删除按钮 -->
<el-table-column
fixed="left"
:width="50"
v-if="isShowButton"
v-slot="{ row, $index }"
>
<Icon icon="ep:remove" color="#409eff" size="26" style="cursor: pointer;margin-top: -16px;" @click="handleDelete(row, $index)" />
</el-table-column>
<!-- 多选 --> <!-- 多选 -->
<el-table-column <el-table-column
fixed="left" fixed="left"
:reserve-selection="true" :reserve-selection="true"
type="selection" type="selection"
:width="50" :width="50"
v-if="selectionTable"
/> />
<!-- 序号 --> <!-- 序号 -->
<el-table-column <el-table-column
@ -28,41 +36,206 @@
label="序号" label="序号"
width="80" width="80"
:align="'center'" :align="'center'"
v-if="isShowIndex"
/> />
<el-table-column <el-table-column
v-slot="{ row }" v-slot="{ row }"
v-for="headerItem in tableFields" v-for="headerItem in tableFields"
:key="headerItem" :key="headerItem"
:fixed="headerItem.tableForm &&headerItem.tableForm.fixed? headerItem.tableForm.fixed:''" :fixed="headerItem.tableForm?.fixed"
:label="headerItem.label" :label="headerItem.label" :prop="headerItem.field"
:prop="headerItem.field" :align="headerItem?.tableForm?.align || 'center'"
:sortable="headerItem.tableForm && headerItem.tableForm.sortable ? headerItem.tableForm.sortable:''" :sortable="headerItem?.tableForm?.sortable || ''"
:width="headerItem.tableForm && headerItem.tableForm.width ? headerItem.tableForm.width : '100'" :width="headerItem?.tableForm?.width || 'auto'"
> :min-width="headerItem?.tableForm?.minWidth || 'auto'">
<el-form ref="TableBaseForm_Ref"
<el-form :model="row"
ref="TableBaseForm_Ref" style="width: 100%;"
:model="row" :rules="tableFormRules"
:rules="tableFormRules" :class="tableFormRules ? '' : 'noRulesForm'">
:class="tableFormRules ? '' : 'noRulesForm'" <!-- 字符串输入框 -->
> <el-form-item
<el-form-item > v-if="!headerItem?.tableForm?.type || headerItem?.tableForm?.type == 'InputString'"
<el-input :prop="headerItem.field">
v-model="row[headerItem.field]" <el-input v-model="row[headerItem.field]"
:placeholder="headerItem?.tableForm?.placeholder || '请输入' + headerItem.label"
:disabled="itemIsDisabled(headerItem, row)"
style="width: 100%;"
/> />
</el-form-item> </el-form-item>
</el-form> <!-- 数字输入框 -->
</el-table-column> <el-form-item
<slot></slot> v-if="headerItem?.tableForm?.type == 'InputNumber'"
<template #empty> :prop="headerItem.field">
<el-empty class="vab-data-empty" description="暂无数据" /> <el-input-number
</template> style="width: 100%;"
v-model="row[headerItem.field]"
:max="headerItem?.tableForm?.max"
:min="headerItem?.tableForm?.min"
:disabled="itemIsDisabled(headerItem, row)"
@focus="inpuFocus(headerItem)"/>
</el-form-item>
<!-- 下拉框 -->
<el-form-item
v-if="headerItem?.tableForm?.type == 'Select'"
:prop="headerItem.field">
<el-select
v-model="row[headerItem.field]"
:clearable="headerItem?.tableForm.clearable"
:multiple="headerItem?.tableForm.multiple"
:disabled="itemIsDisabled(headerItem, row)"
:filterable="headerItem?.tableForm.filterable"
:allow-create="headerItem?.tableForm.allowCreate"
style="width: 100%"
:placeholder="headerItem?.tableForm?.placeholder || '请选择' + headerItem.label"
@change="formSelectChange(row[headerItem.field], $event)">
<el-option
v-for="op in initSelectOptions(headerItem)"
:label="op.label"
:value="op.value"
:key="op.value" />
</el-select>
</el-form-item>
<!-- 时间选择器 -->
<el-form-item
v-if="headerItem?.tableForm?.type == 'FormTime'"
:prop="headerItem.field">
<el-time-picker
v-model="row[headerItem.field]"
:placeholder="headerItem?.tableForm?.placeholder || '选择时间'"
style="width: 100%" :disabled="itemIsDisabled(headerItem, row)"
:format="headerItem?.tableForm?.format || 'HH:mm:ss'"
:value-format="headerItem?.tableForm?.valueFormat || 'HH:mm:ss'" />
</el-form-item>
<!-- 日期选择器 -->
<el-form-item
v-if="headerItem?.tableForm?.type == 'FormDate'"
:prop="headerItem.field">
<el-date-picker
v-model="row[headerItem.field]"
style="width: 100%"
:disabled="itemIsDisabled(headerItem, row)"
:placeholder="headerItem?.tableForm?.placeholder || '选择日期'"
:format="headerItem?.tableForm?.format || 'YYYY-MM-DD'"
:value-format="headerItem?.tableForm?.valueFormat || 'YYYY-MM-DD'" />
</el-form-item>
<!-- 日期时间选择器 -->
<el-form-item
v-if="headerItem?.tableForm?.type == 'FormDateTime'"
:prop="headerItem.field">
<el-date-picker
type="datetime"
v-model="row[headerItem.field]"
:placeholder="headerItem?.tableForm?.placeholder || '选择日期时间'"
style="width: 100%"
:format="headerItem?.tableForm?.format || 'YYYY-MM-DD HH:mm:ss'"
:value-format="headerItem?.tableForm?.valueFormat || 'YYYY-MM-DDTHH:mm:ss'"
:disabled="itemIsDisabled(headerItem, row)" />
</el-form-item>
<!--开始时间结束时间选择器 (原类型datetimerange已弃用 使用type+timeType结合方式)-->
<el-form-item
v-if="headerItem?.tableForm?.type == 'FormTimerange'"
:prop="headerItem.field">
<el-date-picker
v-model="row[headerItem.field]"
:disabled="itemIsDisabled(headerItem, row)"
:type="headerItem?.tableForm?.timeType || 'datetimerange'"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:format="headerItem?.tableForm?.format || 'YYYY-MM-DD HH:mm:ss'"
:value-format="headerItem?.tableForm?.valueFormat || 'YYYY-MM-DDTHH:mm:ss'" />
</el-form-item>
<!-- Switch 开关 -->
<el-form-item
v-if="headerItem?.tableForm?.type == 'Switch'"
:prop="headerItem.field">
<el-switch
v-model="row[headerItem.field]"
:disabled="itemIsDisabled(headerItem, row)"
:loading="headerItem?.tableForm?.loading"
:size="headerItem?.tableForm?.size"
:active-icon="headerItem?.tableForm?.activeIcon"
:inactive-icon="headerItem?.tableForm?.inactiveIcon"
:active-text="headerItem?.tableForm?.activeText"
:inactive-text="headerItem?.tableForm?.inactiveText"
:active-value="headerItem?.tableForm?.activeValue"
:inactive-value="headerItem?.tableForm?.inactiveValue"
:active-color="headerItem?.tableForm?.inactiveColor"
:inactive-color="headerItem?.tableForm?.inactiveColor" />
</el-form-item>
<!-- Radio 单选-->
<el-form-item
v-if="headerItem?.tableForm?.type == 'Radio'"
:prop="headerItem.field">
<el-radio-group
v-model="row[headerItem.field]"
:size="headerItem?.tableForm?.size"
:disabled="itemIsDisabled(headerItem, row)"
:text-color="headerItem?.tableForm?.textColor"
:fill="headerItem?.tableForm?.fill"
:name="headerItem?.tableForm?.name"
:id="headerItem?.tableForm?.id">
<el-radio
v-for="(item, index) in initSelectOptions(headerItem)"
:key="index"
:label="item.value"
:size="headerItem?.tableForm?.size"
:disabled="itemIsDisabled(headerItem, row)"
:border="headerItem?.tableForm?.border">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- Checkbox 多选-->
<el-form-item
v-if="headerItem?.tableForm?.type == 'Checkbox'"
:prop="headerItem.field">
<el-checkbox-group
v-model="row[headerItem.field]"
:disabled="itemIsDisabled(headerItem, row)"
:size="headerItem?.tableForm?.size"
:min="headerItem?.tableForm?.min"
:max="headerItem?.tableForm?.max"
:text-color="headerItem?.tableForm?.textColor"
:fill="headerItem?.tableForm?.fill">
<el-checkbox
v-for="(item, index) in initSelectOptions(headerItem)"
:key="index"
:label="item.value"
:disabled="itemIsDisabled(headerItem, row)"
:true-label="headerItem?.tableForm?.trueLabel"
:false-label="headerItem?.tableForm?.falseLabel"
:border="headerItem?.tableForm?.border"
:size="headerItem?.tableForm?.size"
:name="headerItem?.tableForm?.name"
:checked="headerItem?.tableForm?.checked">
{{ item.label }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</el-table-column>
</el-table> </el-table>
<div class="button flex" v-if="isShowButton">
<div class="p-12px" @click="handleAdd">
<Icon icon="ep:circle-plus" color="#409eff" size="26" style="cursor: pointer;" />
<div>添加明细</div>
</div>
</div>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
const props = defineProps({ import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
const props = defineProps({
//
isShowButton: {
type: Boolean,
default: true,
},
// :custom="headerItem.sortable?headerItem.sortable:false" // :custom="headerItem.sortable?headerItem.sortable:false"
selectionTable: { selectionTable: {
type: Boolean, type: Boolean,
@ -94,6 +267,12 @@
}, },
// table // table
height: { height: {
type: [Number, String],
default: () => {
return '200'
}
},
maxHeight: {
type: [Number, String], type: [Number, String],
default: () => { default: () => {
return '650' return '650'
@ -102,7 +281,7 @@
// //
border: { border: {
type: Boolean, type: Boolean,
default: true, default: false,
}, },
// tablerules // tablerules
tableFormRules: { tableFormRules: {
@ -110,11 +289,130 @@
default: null default: null
} }
}) })
console.log(props.tableFields); //
const emit = defineEmits([
'tableSelectionChange',
'extendedButtonsClick',
'formSelectChange',
'tableSortChange',
'showDrawer',
'selectCallback',
'handleTableSelect',
'handleDelete',
'handleAdd',
'inpuFocus'
])
// | type = radio | type = select
const initSelectOptions = (item) => {
return item.dictType ? getStrDictOptions(item.dictType) : item.tableForm.initOptions
}
//
const formSelectChange = (field, val) => {
emit('formSelectChange', field, val)
}
// selection
const tableSelectionChange = (val) => {
emit('tableSelectionChange', val)
}
//
const tableSortChange = (column, prop, order) => {
emit('tableSortChange', column, prop, order)
}
//
const showSelect = (val, statusID) => {
return getDictForStatusID(val, statusID)
}
//
const handleTableSelect = (row, column, event) => {
emit('handleTableSelect', row, column, event)
}
// item
const itemIsDisabled = (colum, row) => {
return Boolean(colum.tableForm?.disabled) || Boolean(row.disabled) || Boolean(row['disabled_' + colum.field])
}
const TableBaseComponents_Ref = ref()
const TableBaseForm_Ref = ref()
/**
* 验证表单是否符合rules
* @param {*} success 如果验证成功走的方法
* @param {*} error 如果验证不成功走的方法
*/
const $baseMessage = inject('$baseMessage')
const validateForm = (success, error) => {
let _lists = TableBaseForm_Ref.value.map(v => v.validate())
Promise.all(_lists).then(res => {
if (success) success()
}).catch(err => {
if (error) {
error()
return
}
$baseMessage('验证未通过,请按规则填写', 'error', 'vab-hey-message-error')
})
}
//
const handleDelete = (row, index) => {
console.log(row);
console.log(index);
emit('handleDelete', row)
}
//
const handleAdd = () => {
emit('handleAdd')
}
//
const inpuFocus = (headerItem)=>{
if(headerItem.isInpuFocusShow){
emit('inpuFocus')
}
}
// setup
defineExpose({
TableBaseComponents_Ref,
validateForm
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep(.el-table__body){
padding:10px 0px
}
::v-deep(.el-table--default .el-table__cell) {
padding: 2px 0px;
border: none;
}
::v-deep(.el-table td.el-table__cell div) {
display: flex !important;
align-items: center !important;
justify-content: center !important;
overflow: visible;
}
::v-deep(.el-icon) {
display: block;
}
.button {
>div {
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
>div {
margin-left: 6px;
text-decoration: underline;
color: #409eff;
}
}
}
</style> </style>

2
src/components/Tabs/src/Tabs.vue

@ -26,8 +26,6 @@ const props = defineProps({
default: 0 default: 0
}, },
}) })
const tabsList = props.tabsList
const current = ref(props.current); const current = ref(props.current);
const change = (item, index) => { const change = (item, index) => {
current.value = index current.value = index

2
src/store/modules/app.ts

@ -59,7 +59,7 @@ export const useAppStore = defineStore('app', {
tagsViewIcon: true, // 是否显示标签图标 tagsViewIcon: true, // 是否显示标签图标
logo: true, // logo logo: true, // logo
fixedHeader: true, // 固定toolheader fixedHeader: true, // 固定toolheader
footer: true, // 显示页脚 footer: false, // 显示页脚
greyMode: false, // 是否开始灰色模式,用于特殊悼念日 greyMode: false, // 是否开始灰色模式,用于特殊悼念日
fixedMenu: wsCache.get('fixedMenu') || false, // 是否固定菜单 fixedMenu: wsCache.get('fixedMenu') || false, // 是否固定菜单

26
src/utils/disposition/tableColumns.ts

@ -9,10 +9,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
field: 'code', field: 'code',
sort: 'custom', sort: 'custom',
table: { table: {
width:700 width: 150
}, },
tableForm:{ tableForm:{
width: 300, minWidth:200,
sortable:false sortable:false
} }
}, },
@ -24,7 +24,7 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
width: 150 width: 150
}, },
tableForm:{ tableForm:{
width: 300, minWidth:200,
sortable:false sortable:false
} }
}, },
@ -60,6 +60,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
} , } ,
form: { form: {
component: 'Switch', component: 'Switch',
},
tableForm:{
width: 100,
type:'Switch',
} }
}, },
{ {
@ -72,6 +76,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
isTable: true, isTable: true,
table: { table: {
width: 120 width: 120
} ,
tableForm:{
width: 200,
type:'Select',
} }
}, },
{ {
@ -100,6 +108,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
}, },
form: { form: {
component: 'Switch', component: 'Switch',
},
tableForm:{
width: 180,
type:'Radio',
} }
}, },
{ {
@ -131,6 +143,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
} , } ,
form: { form: {
component: 'Radio', component: 'Radio',
},
tableForm:{
width: 180,
type:'Checkbox',
} }
}, },
{ {
@ -326,6 +342,10 @@ export const ItemBasic = useCrudSchemas(reactive<CrudSchema[]>([
componentProps: { componentProps: {
type: 'datetimerange', type: 'datetimerange',
} }
},
tableForm:{
width: 200,
type:'FormDateTime',
} }
}, },
{ {

179
src/views/detail/detail/index.vue

@ -1,179 +0,0 @@
<template>
<!-- 搜索工作栏 -->
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="部门名称" prop="title">
<el-input v-model="queryParams.name" placeholder="请输入部门名称" clearable class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button type="info" plain @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button type="info" plain @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<div class="flex">
<!-- 详情 -->
<ContentWrap class="w-[73%]">
<Form ref="formRef" v-loading="formLoading" :rules="rules" :schema="ItemBasic.allSchemas.formSchema" :is-col="true"/>
</ContentWrap>
<ContentWrap class="w-[27%] ml-16px">
<!-- 附件组件 -->
<Annex :data="annexData" @handleImport="handleImport" @deleteAnnex="deleteAnnexSuccess" />
<!-- 备注组件 -->
<Remarks :data="remarksData" class="mt-20px" @submitSucss="remarksSubmitSucss"/>
<!-- 变更记录组件 -->
<ChangeRecord :data="changeRecordData" class="mt-20px" />
</ContentWrap>
<!-- 用户导入对话框 -->
<ImportForm ref="importFormRef" :importTemplateData="importTemplateData" @success="importSuccess" />
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'Detail' })
import Annex from '@/components/Annex/src/Annex.vue'
import Remarks from '@/components/Remarks/src/Remarks.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import ChangeRecord from '@/components/ChangeRecord/src/ChangeRecord.vue'
import { ItemBasic } from '@/utils/disposition/tableColumns.ts'
import * as UserApi from '@/api/system/user'
//
const queryParams = reactive({
title: '',
name: undefined,
status: undefined,
pageNo: 1,
pageSize: 100
})
const queryFormRef = ref() //
// const formLabel = ref(ItemBasic)//formlabel
//
const annexData = reactive({
annexList: [{
title: '文件名文件名2023-12-12.docx',
size: '150.02KB',
people: '贾先生',
time: '2023年5月6日 17:16:00',
}, {
title: '文件名文件名2023-12-15.docx',
size: '242KB',
people: '张张',
time: '2022年12月12日 17:16:00',
}]
})
//
const remarksData = reactive({
remarksList: [{
name: '诸葛亮',
text: '转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。',
time: '2023年5月6日 17:16:00',
}, {
name: '刘备',
text: '转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。',
time: '2022年12月12日 17:16:00',
}]
})
//
const changeRecordData = reactive({
changeRecordList: [{
name: '诸葛亮',
type: 1,
time: '2023年5月6日 17:16:00',
}, {
name: '刘备',
type: 2,
time: '2023年5月6日 17:16:00',
}, {
name: '曹操',
type: 3,
time: '2023年5月6日 17:16:00',
file: [{
name: '这是个附件的名字.docx',
url: 'http://localhost:12080/admin-api/system/user/get-import-template'
}, {
name: '这是个附件的名字.docx',
url: 'http://localhost:12080/admin-api/system/user/get-import-template'
}]
}]
})
//
const importTemplateData = reactive({
templateUrl: UserApi.importUserTemplate(),
templateTitle: '导入模版99.xls'
})
//
const importSuccess = () => {
}
/** 搜索按钮操作 */
const handleQuery = () => {
}
/** 重置按钮操作 */
const resetQuery = () => {
queryParams.pageNo = 1
queryFormRef.value.resetFields()
}
/** 用户导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
//
const deleteAnnexSuccess = async () => {
console.log('删除成功');
}
//
const remarksSubmitSucss=()=>{
console.log('提交陈工');
}
import * as MailAccountApi from '@/api/system/mail/account'
import { allSchemas, rules } from '@/views/system/mail/account/account.data'
const { t } = useI18n() //
const message = useMessage() //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formRef = ref() // Ref
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
if (!formRef) return
const valid = await formRef.value.getElFormRef().validate()
if (!valid) return
//
formLoading.value = true
try {
const data = formRef.value.formModel as MailAccountApi.MailAccountVO
if (formType.value === 'create') {
await MailAccountApi.createMailAccount(data)
message.success(t('common.createSuccess'))
} else {
await MailAccountApi.updateMailAccount(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
</script>

4
src/views/infra/customInterface/index.vue

@ -1,7 +1,5 @@
<template> <template>
<ContentWrap> <IFrame :src="src"/>
<IFrame :src="src" />
</ContentWrap>
</template> </template>
<script lang="ts" setup name="CustomInterface"> <script lang="ts" setup name="CustomInterface">
// import { getAccessToken, getTenantId } from '@/utils/auth' // import { getAccessToken, getTenantId } from '@/utils/auth'

67
src/views/wms/itembasic/ItembasicForm.vue

@ -4,7 +4,7 @@
<Form ref="formRef" v-loading="formLoading" :rules="ItemBasicRules" :schema="ItemBasic.allSchemas.formSchema" <Form ref="formRef" v-loading="formLoading" :rules="ItemBasicRules" :schema="ItemBasic.allSchemas.formSchema"
:model="formData" :is-col="true" /> :model="formData" :is-col="true" />
<div class="table"> <div class="table">
<TableForm :tableFields="ItemBasic.allSchemas.tableFormColumns" :tableData="tableData"/> <TableForm ref="tableFormRef" :tableFields="ItemBasic.allSchemas.tableFormColumns" :tableData="tableData" class="w-[100%]" @handleAdd="handleAdd" :tableFormRules="ItemBasicRules" @handleDelete="handleDelete" @inpuFocus="inpuFocus"/>
</div> </div>
</div> </div>
<template #footer> <template #footer>
@ -29,6 +29,7 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
const formData = ref('') const formData = ref('')
const formType = ref('') // create - update - const formType = ref('') // create - update -
const formRef = ref() // Ref const formRef = ref() // Ref
const tableFormRef = ref()
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
@ -118,6 +119,7 @@ const Butttondata = [
const buttonBaseClick = (val, item) => { const buttonBaseClick = (val, item) => {
// //
if (val == 'save') { if (val == 'save') {
tableFormRef.value.validateForm()
} }
// //
else if (val == 'close') { else if (val == 'close') {
@ -125,27 +127,48 @@ const buttonBaseClick = (val, item) => {
} }
} }
const tableData = ref([{ // const tableData = ref([{
code: 'GOODS-0202-12', // code: '',
name:'物料', // name:'',
unit:'吨', // unit:'',
num: '20' // num: '20',
}, { // isStdPack:'FALSE'
code: 'GOODS-0202-12', // }, {
name: '物料', // code: 'GOODS-0202-12',
unit: '吨', // name: '',
num: '20' // unit: '',
}, { // num: '20'
code: 'GOODS-0202-12', // }, {
name: '物料', // code: 'GOODS-0202-12',
unit: '吨', // name: '',
num: '20' // unit: '',
}, { // num: '20'
code: 'GOODS-0202-12', // }, {
name: '物料', // code: 'GOODS-0202-12',
unit: '吨', // name: '',
num: '20' // unit: '',
}]) // num: '20'
// }])
const tableData = ref([])
//
const handleAdd = ()=>{
tableData.value.push({
code: '',
name: '',
unit: '',
num: ''
})
}
//
const handleDelete =(item,index)=>{
tableData.value.splice(index,1)
}
// input
const inpuFocus = () => {
console.log(1);
}
</script> </script>
<style scoped> <style scoped>
.table { .table {

Loading…
Cancel
Save