detail.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <div class="card-edit">
  3. <a-divider orientation="left">主题定义</a-divider>
  4. <a-descriptions title="" bordered>
  5. <a-descriptions-item :labelStyle="{'width':'12%'}" :contentStyle="{'width':'21%'}" label="主题名称"> {{ dataModel.subjectName }}</a-descriptions-item>
  6. <a-descriptions-item :labelStyle="{'width':'12%'}" :contentStyle="{'width':'21%'}" label="表编码"> {{ dataModel.tabCode }}</a-descriptions-item>
  7. <a-descriptions-item :labelStyle="{'width':'12%'}" :contentStyle="{'width':'21%'}" label="表名称"> {{ dataModel.tabName }}</a-descriptions-item>
  8. <a-descriptions-item :labelStyle="{'width':'12%'}" :contentStyle="{'width':'21%'}" label="描述"> {{ dataModel.tabDesc }}</a-descriptions-item>
  9. <a-descriptions-item :labelStyle="{'width':'12%'}" :contentStyle="{'width':'21%'}" label="是否有外键字段"> {{ dataModel.isReferences==1?"是":"否" }}</a-descriptions-item>
  10. </a-descriptions>
  11. <a-divider orientation="left">字段定义</a-divider>
  12. <a-table :columns="columns" :data-source="fieldData" :scroll="{ x:'100%', y: 500 }" :pagination="false"
  13. bordered>
  14. </a-table>
  15. <a-divider orientation="left">Sql预览</a-divider>
  16. <codemirror
  17. v-model="dataModel.execSql"
  18. :style="{ height: '100px',width:'100%' }"
  19. :autofocus="true"
  20. :indent-with-tab="true"
  21. disabled="false"
  22. tab-size="2"
  23. :theme="'oneDark'"
  24. />
  25. <a-form-item class="buttom-btns">
  26. <a-button @click="onClose">关闭</a-button>
  27. </a-form-item>
  28. </div>
  29. </template>
  30. <script lang="ts">
  31. import { ref,defineComponent} from 'vue';
  32. import {get} from "@/api/common";
  33. import {useTabsViewStore} from "@/store/modules/tabsView";
  34. import dayjs from "dayjs";
  35. import type {TableColumnsType} from "ant-design-vue";
  36. import {getDictionaryItemList} from "@/api/system/dictionary";
  37. import type {Subject, Subjectfield} from "@/views/subject/model";
  38. import {Codemirror} from 'vue-codemirror';
  39. import {MySQL, sql} from "@codemirror/lang-sql";
  40. import {oneDark} from "@codemirror/theme-one-dark";
  41. import {useRoute} from "vue-router";
  42. import router from "@/router";
  43. export default defineComponent({
  44. name: 'subjectDetail',
  45. components: {
  46. Codemirror, MySQL, sql, oneDark
  47. },
  48. setup() {
  49. const tabsViewStore = useTabsViewStore();
  50. const route = useRoute();
  51. const fieldData = ref<Subjectfield[]>([]);
  52. const dataModel = ref<Subject>();
  53. const settingTypeList = ref([{name: '', value: ''}]);
  54. const queryTypeList = ref([{name: '', value: ''}]);
  55. getDictionaryItemList({code: "queryType"}).then(data => {
  56. queryTypeList.value = data;
  57. });
  58. getDictionaryItemList({code: "settingType"}).then(data => {
  59. settingTypeList.value = data;
  60. });
  61. const columns: TableColumnsType = [
  62. {
  63. title: '序号', width: 80, dataIndex: 'num', key: 'num', align: "center", customRender: ({index}) => {
  64. return `${index + 1}`;
  65. }
  66. },
  67. {title: '字段编码', dataIndex: 'fieldCode', key: 'fieldCode', align: "center"},
  68. {title: '字段名称', dataIndex: 'fieldName', key: 'fieldName', align: "center"},
  69. {
  70. title: '配置类型', dataIndex: 'settingTypeId', key: 'settingTypeId', align: "center", customRender: ({record}) => {
  71. return settingTypeList.value.filter(x => x.value == record.settingTypeId)[0]?.name;
  72. }
  73. },
  74. {
  75. title: '是否查询字段', dataIndex: 'isSearchField', key: 'isSearchField', align: "center", customRender: ({record}) =>
  76. record.isSearchField == "1" ? "是" : "否"
  77. },
  78. {
  79. title: '查询类型', dataIndex: 'queryTypeId', key: 'queryTypeId', align: "center", customRender: ({record}) =>
  80. queryTypeList.value.filter(x => x.value == record.queryTypeId)[0]?.name
  81. },
  82. {title: '取数字典编码', dataIndex: 'dictionaryCode', key: 'dictionaryCode', align: "center"},
  83. {title: '显示排序', dataIndex: 'disOrder', key: 'disOrder', align: "center"},
  84. {
  85. title: '标签', dataIndex: 'tagList', key: 'tagList', align: "center", customRender: ({record}) =>
  86. record.tagList == null ? "" : (record.tagList as []).join(",")
  87. },
  88. {
  89. title: '是否关联字段', dataIndex: 'isForeignKey', key: 'isForeignKey', align: "center", customRender: ({record}) =>
  90. record.isForeignKey == "1" ? "是" : "否"
  91. },
  92. {title: '显示别名', dataIndex: 'fieldAlias', key: 'fieldAlias', align: "center"},
  93. {title: '外键表', dataIndex: 'referencesTab', key: 'referencesTab', align: "center"},
  94. {title: '外键列', dataIndex: 'foreignKey', key: 'foreignKey', align: "center"},
  95. {title: '外键表显示列', dataIndex: 'displayColumn', key: 'displayColumn', align: "center"},
  96. ];
  97. const loadData = async (id) => {
  98. get('subject/getSubject',
  99. {subjectId: id}).then(data => {
  100. dataModel.value = data;
  101. })
  102. get('subject/getFieldList',
  103. {subjectId: id}).then(data => {
  104. fieldData.value = data;
  105. })
  106. }
  107. loadData( history.state.params?.id);
  108. const onClose = () => {
  109. tabsViewStore.closeCurrentTab(route);
  110. router.back();
  111. };
  112. return {
  113. loadData,columns,fieldData,
  114. onClose,
  115. dataModel,
  116. dayjs
  117. };
  118. },
  119. created() {
  120. const id = history.state.params?.id;
  121. const approveKeyID =ref( history.state.params?.approveKeyID);
  122. this.loadData(id ? id : approveKeyID.value);
  123. }
  124. });
  125. </script>