|
@@ -1,175 +1,201 @@
|
|
|
<template>
|
|
|
<div class="card-edit">
|
|
|
- <Form :model="formState" @finish="onFinish" autocomplete="off">
|
|
|
- <a-divider orientation="left">学校信息</a-divider>
|
|
|
- <Row :gutter="[16,8]">
|
|
|
- <Col :span="8">
|
|
|
- <a-form-item label="实习学年" :label-col="{span:6}" name="schoolYearID"
|
|
|
- :rules="[{ required: true, message: '请选择学年!' }]">
|
|
|
- <a-select
|
|
|
- ref="select" style="width: 200px"
|
|
|
- v-model:value="formState.schoolYearID"
|
|
|
- :options="schoolYearList"
|
|
|
- :field-names="{label:'schoolYear',value:'schoolYearID'}"
|
|
|
- >
|
|
|
- </a-select>
|
|
|
- </a-form-item>
|
|
|
- </Col>
|
|
|
+ <a-form :model="dataModel" @finish="onFinish" autocomplete="off">
|
|
|
+ <a-divider orientation="left">主题定义</a-divider>
|
|
|
+ <a-row :gutter="24">
|
|
|
<a-col :span="8">
|
|
|
- <a-form-item label="专业" :label-col="{span:6}" name="majorGradeID"
|
|
|
- :rules="[{ required: true, message: '请选择专业!' }]">
|
|
|
- <a-select style="width: 200px"
|
|
|
- ref="select" show-search :filter-option="filterOption"
|
|
|
- v-model:value="formState.majorGradeID"
|
|
|
- :options="majorGradeList"
|
|
|
- :field-names="{label:'name',value:'majorGradeID'}"
|
|
|
- >
|
|
|
- </a-select>
|
|
|
+ <a-form-item :label-col="{span:6}" label="表编码" name="tabcode"
|
|
|
+ :rules="[{ required: true, message: '请填写表编码!' }]">
|
|
|
+ <a-input v-model:value="dataModel.tabcode" placeholder="">
|
|
|
+ </a-input>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
<a-col :span="8">
|
|
|
- <a-form-item label="基地类型" :label-col="{span:6}" name="practiceBaseTypeID"
|
|
|
- :rules="[{ required: true, message: '请选择基地类型!' }]">
|
|
|
- <a-select style="width: 200px"
|
|
|
- ref="select"
|
|
|
- v-model:value="formState.practiceBaseTypeID"
|
|
|
- :options="practiceBaseTypeList" @change="loadPracticebaseList"
|
|
|
- :field-names="{label:'name',value:'value'}"
|
|
|
- >
|
|
|
- </a-select>
|
|
|
+ <a-form-item :label-col="{span:6}" label="表名称" name="tabname"
|
|
|
+ :rules="[{ required: true, message: '请填表名称!' }]">
|
|
|
+ <a-input v-model:value="dataModel.tabname" placeholder="">
|
|
|
+ </a-input>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
- </Row>
|
|
|
- <a-divider orientation="left">岗位信息</a-divider>
|
|
|
- <Row :gutter="[16,8]">
|
|
|
- <Col :span="8">
|
|
|
- <a-form-item label="单位" :label-col="{span:6}" name="practiceBaseID"
|
|
|
- :rules="[{ required: true, message: '请选择单位!' }]">
|
|
|
- <a-select
|
|
|
- ref="select" show-search :filter-option="filterOption"
|
|
|
- v-model:value="formState.practiceBaseID"
|
|
|
- :options="practicebaseList"
|
|
|
- :field-names="{label:'name',value:'practiceBaseID'}"
|
|
|
- >
|
|
|
- </a-select>
|
|
|
+ </a-row>
|
|
|
+ <a-row :gutter="24">
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item :label-col="{span:6}" label="是否有外键字段" name="isreferences"
|
|
|
+ :rules="[{ required: true, message: '请填写是否有外键字段!' }]">
|
|
|
+ <a-radio-group v-model:value="dataModel.isreferences">
|
|
|
+ <a-radio :value="1">是</a-radio>
|
|
|
+ <a-radio :value="0">否</a-radio>
|
|
|
+ </a-radio-group>
|
|
|
</a-form-item>
|
|
|
- </Col>
|
|
|
- <Col :span="8">
|
|
|
- <a-form-item :label-col="{span:6}" :rules="[{ required: true, message: '岗位名称为空!' }]" label="岗位名称" name="name">
|
|
|
- <a-input v-model:value="formState.name" class="form-input">
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item :label-col="{span:6}" label="描述" name="tabdesc">
|
|
|
+ <a-input v-model:value="dataModel.tabdesc" placeholder="">
|
|
|
</a-input>
|
|
|
</a-form-item>
|
|
|
- </Col>
|
|
|
- <Col :span="8">
|
|
|
- <a-form-item :label-col="{span:6}" :rules="[{ required: true, message: '岗位数量为空!' }]" label="岗位数量" name="qty">
|
|
|
- <a-input-number v-model:value="formState.qty" class="form-input">
|
|
|
- </a-input-number>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-divider orientation="left">字段定义</a-divider>
|
|
|
+ <a-row>
|
|
|
+ <a-col :span="24" style="margin-right: 20px;">
|
|
|
+ <div style="float: right;">
|
|
|
+ <Space>
|
|
|
+ <a-button @click="add()">
|
|
|
+ <template #icon>
|
|
|
+ <plus-circle-outlined/>
|
|
|
+ </template>
|
|
|
+ 新增
|
|
|
+ </a-button>
|
|
|
+ </Space>
|
|
|
+ </div>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row>
|
|
|
+ <a-col style="margin-bottom: 20px;">
|
|
|
+ <a-table :columns="columns" :data-source="data" :pagination="false"
|
|
|
+ bordered>
|
|
|
+ <template #bodyCell="{ column ,index}">
|
|
|
+ <template v-if="column.key === 'name'">
|
|
|
+ <div>
|
|
|
+ <a-input v-if="isEdit"
|
|
|
+ v-model:value="data[index][column.key]" style="width: 200px"
|
|
|
+ />
|
|
|
+ <template v-else>
|
|
|
+ {{ data[index][column.key] }}
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-if="column.key === 'typeName'">
|
|
|
+ <div>
|
|
|
+ <a-input v-if="isEdit"
|
|
|
+ v-model:value="data[index][column.key]" style="width: 200px"
|
|
|
+ />
|
|
|
+ <template v-else>
|
|
|
+ {{ data[index][column.key] }}
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-if="column.key === 'qty'">
|
|
|
+ <div>
|
|
|
+ <a-input v-if="isEdit"
|
|
|
+ v-model:value="data[index][column.key]" style="width: 200px"
|
|
|
+ />
|
|
|
+ <template v-else>
|
|
|
+ {{ data[index][column.key] }}
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-if="column.key === 'operation'">
|
|
|
+ <a-button type="link" size="small" @click="deleteDevice(index)">删除</a-button>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </a-table>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-divider orientation="left">生成Sql</a-divider>
|
|
|
+ <a-row>
|
|
|
+ <a-col class="table-bottom-a1">
|
|
|
+ <a-form-item :label-col="{span:8}" label="" name="remark">
|
|
|
+ <a-textarea v-model:value="dataModel.remark" placeholder="备注" :rows="5"/>
|
|
|
</a-form-item>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <Row>
|
|
|
- <Col class="table-bottom-a1">
|
|
|
- <a-textarea v-model:value="formState.remark" placeholder="备注" :rows="5"/>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <Row>
|
|
|
- <Col :span="24" style="text-align: right;margin: 20px;">
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row>
|
|
|
+ <a-col :span="24" style="text-align: right;margin: 20px;">
|
|
|
<Space>
|
|
|
- <a-button type="primary" html-type="submit">提交</a-button>
|
|
|
+ <a-form-item class="buttom-btns">
|
|
|
+ <a-button @click="onClose">取消</a-button>
|
|
|
+ <a-button type="primary" html-type="submit">提交</a-button>
|
|
|
+ </a-form-item>
|
|
|
</Space>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- </Form>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </a-form>
|
|
|
+ <FieldEdit ref="modalRef" :loadData="loadData"></FieldEdit>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<script lang="ts">
|
|
|
-import {Form, Row, Col, Space} from 'ant-design-vue';
|
|
|
-import type {SelectProps} from 'ant-design-vue';
|
|
|
-import {ref,defineComponent} from "vue";
|
|
|
-import { useRoute} from 'vue-router';
|
|
|
-import {getDictionaryItemList, getMajorGradeList, getSchoolyearList} from "@/api/system/dictionary";
|
|
|
-import {get, save} from "@/api/common";
|
|
|
-import {useTabsViewStore} from "@/store/modules/tabsView";
|
|
|
+<script lang="ts">
|
|
|
+import {defineComponent, reactive, ref, toRefs} from 'vue';
|
|
|
+import {useTabsViewStore} from '@/store/modules/tabsView';
|
|
|
import BUploadFile from "@/components/file/uploadFile.vue";
|
|
|
-import Approve from "@/components/basic/approve/Approve.vue";
|
|
|
-import BApproveList from "@/components/basic/approve/ApproveList.vue";
|
|
|
+import type {TableColumnsType} from 'ant-design-vue';
|
|
|
+import {save} from '@/api/common';
|
|
|
+import FieldEdit from "@/views/subject/fieldedit.vue";
|
|
|
+
|
|
|
+interface FormState {
|
|
|
+ dataModel: any;
|
|
|
+}
|
|
|
|
|
|
export default defineComponent({
|
|
|
- name: 'positionedit',
|
|
|
- components: {BUploadFile, Approve, BApproveList,Form, Row, Col, Space},
|
|
|
+ name: 'ClassroomEditForm',
|
|
|
+ components: {
|
|
|
+ BUploadFile,FieldEdit
|
|
|
+ },
|
|
|
setup() {
|
|
|
-
|
|
|
- const route = useRoute();
|
|
|
+ const formState = reactive<FormState>({dataModel: {}});
|
|
|
const tabsViewStore = useTabsViewStore();
|
|
|
- const schoolYearList = ref<SelectProps['options']>();
|
|
|
- const majorGradeList = ref<SelectProps['options']>();
|
|
|
- const practiceBaseTypeList = ref<SelectProps['options']>();
|
|
|
- const practicebaseList = ref<SelectProps['options']>();
|
|
|
-
|
|
|
- const formState = ref({
|
|
|
- schoolYearID: "",
|
|
|
- majorGradeID: "",
|
|
|
- practiceBaseTypeID: "",
|
|
|
- practiceBaseID: "",
|
|
|
- name: null,
|
|
|
- qty: null,
|
|
|
- remark: "",
|
|
|
- });
|
|
|
-
|
|
|
- getDictionaryItemList({code: "PracticeBaseType"}).then(x => {
|
|
|
- practiceBaseTypeList.value = x.filter(f => f.value != 3);
|
|
|
- })
|
|
|
- getSchoolyearList().then(data => {
|
|
|
- schoolYearList.value = data;
|
|
|
- });
|
|
|
+ const modalRef = ref();
|
|
|
|
|
|
- getMajorGradeList(formState.value.schoolYearID).then(data => {
|
|
|
- majorGradeList.value = data;
|
|
|
- });
|
|
|
- const loadPracticebaseList = () => {
|
|
|
- formState.value.practiceBaseID = "";
|
|
|
- getPracticebaseList();
|
|
|
- }
|
|
|
- const getPracticebaseList = async function () {
|
|
|
+ const onFinish = () => {
|
|
|
+ formState.dataModel.device = data.value
|
|
|
+ save('', formState.dataModel).then(result => {
|
|
|
+ if (result) {
|
|
|
+ onClose(1)
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+ const onFinishFailed = (errorInfo: any) => {
|
|
|
+ console.log('Failed:', errorInfo);
|
|
|
+ };
|
|
|
|
|
|
- if (formState.value.practiceBaseTypeID) {
|
|
|
- const result: any = await get('practicebase/practicebase/getList', {
|
|
|
- page: 1, rows: 999,
|
|
|
- practiceBaseTypeID: formState.value.practiceBaseTypeID,
|
|
|
- recordStatus: 1
|
|
|
- });
|
|
|
- practicebaseList.value = result.list;
|
|
|
- }
|
|
|
- }
|
|
|
- const filterOption = (input: string, option: any) => {
|
|
|
- return option.name.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
|
|
+ const onClose = (reload: any) => {
|
|
|
+ tabsViewStore.closeCurrentTabByPath("/practicebase/classroom/edit");
|
|
|
+ tabsViewStore.openTab("/practicebase/classroom/list", {reload: reload});
|
|
|
};
|
|
|
|
|
|
const loadData = async (id) => {
|
|
|
- const reqData = await get('position/getPosition', {positionID: id});
|
|
|
- (formState.value as any) = reqData;
|
|
|
- getPracticebaseList();
|
|
|
+ console.log(id)
|
|
|
}
|
|
|
|
|
|
- const onFinish = () => {
|
|
|
- save('position/savePosition', formState.value).then(result => {
|
|
|
- if (result) {
|
|
|
- tabsViewStore.addTabByPath('/position/list', {reload: 1});
|
|
|
+ const columns: TableColumnsType = [
|
|
|
+ {
|
|
|
+ title: '序号', width: 80, dataIndex: 'num', key: 'num', align: "center", customRender: ({index}) => {
|
|
|
+ return `${index + 1}`;
|
|
|
}
|
|
|
- });
|
|
|
- };
|
|
|
+ },
|
|
|
+ {title: '设备名称', dataIndex: 'name', key: 'name', align: "center"},
|
|
|
+ {title: '设备型号', dataIndex: 'typeName', key: 'typeName', align: "center"},
|
|
|
+ {title: '数量', dataIndex: 'qty', key: 'qty', align: "center"},
|
|
|
+ {title: '操作', key: 'operation', fixed: 'right', width: 120, align: "center"},
|
|
|
+ ];
|
|
|
+ const isEdit = true;
|
|
|
+ const data = ref([]);
|
|
|
|
|
|
+ const add = () => {
|
|
|
+ modalRef.value.show(formState.dataModel.subid);
|
|
|
+ }
|
|
|
+ const deleteDevice = (record) => {
|
|
|
+ (data.value as any[]).splice(record, 1);
|
|
|
+ // delDev();
|
|
|
+ }
|
|
|
return {
|
|
|
- route, formState,tabsViewStore, schoolYearList, filterOption,majorGradeList,practiceBaseTypeList,practicebaseList,
|
|
|
- loadPracticebaseList,
|
|
|
- onFinish, loadData
|
|
|
+ ...toRefs(formState),
|
|
|
+ onFinish,
|
|
|
+ onFinishFailed,
|
|
|
+ loadData,
|
|
|
+ onClose,
|
|
|
+ add,
|
|
|
+ deleteDevice,
|
|
|
+ columns,
|
|
|
+ isEdit,
|
|
|
+ data,
|
|
|
+ modalRef,
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
- if (history.state.params?.id ) {
|
|
|
- this.loadData( history.state.params?.id);
|
|
|
- }
|
|
|
+ const id = history.state.params?.id;
|
|
|
+ this.loadData(id);
|
|
|
}
|
|
|
-});
|
|
|
+})
|
|
|
</script>
|