whj 1 rok temu
rodzic
commit
9cae24cc85

+ 15 - 0
src/api/custom/form.js

@@ -125,3 +125,18 @@ export function exportCustomForm (parameter) {
     responseType: 'blob'
   })
 }
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+ * @returns {*}
+ */
+export function getTableInfos (parameter) {
+  return axios({
+    url: `/database/data/getTableInfos/${parameter.tableName}`,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}

+ 7 - 0
src/views/test/Test1.vue

@@ -111,6 +111,13 @@ export default {
       }
     }
   },
+  provide () {
+    return {
+      getFormList: () => {
+        return this.list2
+      }
+    }
+  },
   mounted () {
     this.handleSelect({}, this.config)
   },

+ 70 - 0
src/views/test/modules/BindTable.vue

@@ -0,0 +1,70 @@
+<template>
+  <a-modal
+    title="数据绑定"
+    :visible="visible"
+    @cancel="handleCancel"
+    :width="800"
+    @ok="handleOk">
+    <a-table :columns="columns" :data-source="data">
+      <span slot="bind" slot-scope="text,record">
+        <a-select style="width:150px" v-model="record.bind" :options="selectList">
+        </a-select>
+      </span>
+    </a-table>
+  </a-modal>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      visible: false,
+      confirmLoading: false,
+      selectList: [],
+      columns: [
+        {
+          title: '字段名',
+          dataIndex: 'columnComment',
+          key: 'columnComment'
+        },
+        {
+          title: '字段值',
+          dataIndex: 'columnName',
+          key: 'columnName'
+        },
+        {
+          title: '绑定值',
+          dataIndex: 'bind',
+          key: 'bind',
+          scopedSlots: { customRender: 'bind' }
+        }
+      ],
+      data: []
+    }
+  },
+  inject: ['getFormList'],
+  created () {
+
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.data = record
+      const arr = this.getFormList()
+      this.selectList = arr.filter(item => item.type !== 'divider')
+    },
+    handleOk () {
+      const bindList = this.data.filter(item => item.bind)
+      this.$emit('bind', bindList)
+      this.visible = false
+    },
+    handleCancel () {
+      this.visible = false
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 5 - 0
src/views/test/modules/Component.vue

@@ -19,6 +19,11 @@
       <UploadFile v-if="detail.type==='uploadFile'" v-bind="detail.attrs" v-decorator="[detail.value, { rules: [{ required: detail.required, message: detail.attrs.placeholder}] }]" />
       <!-- 图片上传 -->
       <UploadImg v-if="detail.type==='uploadImg'" v-bind="detail.attrs" v-decorator="[detail.value, { rules: [{ required: detail.required, message: detail.attrs.placeholder}] }]" />
+      <!-- 选择数据 -->
+      <template v-if="detail.type==='dataSelect'">
+        <a-input style="width:70%" v-bind="detail.attrs" v-decorator="[detail.value, { rules: [{ required: detail.required, message: detail.attrs.placeholder}] }]" />
+        <a-button style="width:30%" type="primary" @click="handleSelect">选择</a-button>
+      </template>
     </a-form-item>
     <!-- 分割线 -->
     <a-divider v-bind="detail.attrs" v-if="detail.type==='divider'">

+ 22 - 1
src/views/test/modules/Detail.vue

@@ -91,6 +91,14 @@
           <a-input-number v-model="model.attrs.maxSize" />
         </a-form-item>
       </template>
+      <!-- 选择数据 -->
+      <template v-if="model.type === 'dataSelect'">
+        <a-form-item label="选择表单">
+          <a-select style="width:50%" v-model="model.attrs.dict" placeholder="请选择" :options="DictCache.getChildrenList('TABLE_MAPPING')">
+          </a-select>
+          <a-button style="width:50%" type="primary" @click="bindTable(model.attrs.dict)">绑定字段</a-button>
+        </a-form-item>
+      </template>
       <a-popconfirm
         title="确定删除该组件?"
         ok-text="确定"
@@ -117,15 +125,19 @@
         </a-radio-group>
       </a-form-item>
     </a-form>
+    <BindTable ref="bindTable" @bind="handleBind" />
   </a-card>
 </template>
 
 <script>
 
 import { VueDraggable } from 'vue-draggable-plus'
+import { getTableInfos } from '@/api/custom/form'
+import BindTable from './BindTable.vue'
 export default {
   components: {
-    VueDraggable
+    VueDraggable,
+    BindTable
   },
   data () {
     return {
@@ -148,6 +160,7 @@ export default {
       ]
     }
   },
+
   created () {
   },
   methods: {
@@ -167,6 +180,14 @@ export default {
     deleteModel () {
       this.$emit('delete', this.model)
     },
+    bindTable (tableName) {
+      getTableInfos({ tableName }).then(res => {
+        this.$refs.bindTable.base(res.data)
+      })
+    },
+    handleBind (val) {
+      this.model.attrs.connect = val
+    },
     onTabChange (key) {
       this.selectKey = key
     }

+ 15 - 0
src/views/test/modules/components.js

@@ -118,5 +118,20 @@ export const componenHidetList = [
       placeholder: '请输入',
       maxSize: 5
     }
+  },
+  {
+    id: 9,
+    name: '选择数据',
+    type: 'dataSelect',
+    value: 'dataSelect',
+    dependentId: false,
+    required: true,
+    label: '选择数据',
+    attrs: {
+      placeholder: '请选择',
+      disabled: true,
+      dict: '',
+      connect: []
+    }
   }
 ]

+ 6 - 1
src/views/upms/dict/Dict.vue

@@ -91,7 +91,8 @@
 <script>
 import { STable, Ellipsis } from '@/components'
 import BaseForm from './modules/BaseForm'
-import { getDictTree, getDictPage, deleteDicts, fetchDict, initDict } from '@/api/upms/dict'
+import { getDictTree, getDictPage, deleteDicts, fetchDict, initDict, dictData } from '@/api/upms/dict'
+import Vue from 'vue'
 
 export default {
   name: 'DictList',
@@ -251,6 +252,10 @@ export default {
     initDict () {
       initDict().then(res => {
         this.$message.info(res.message)
+        dictData().then(response => {
+          const data = response.data
+          Vue.ls.set(this.DictCache.BASE_DATA_CACHE, data)
+        })
       })
     },
     handleOk () {