zhaoke hace 1 año
padre
commit
d8b075a583

+ 143 - 0
src/components/publicPageForm/index.vue

@@ -0,0 +1,143 @@
+<template>
+  <div class="PublicPageForm">
+    <el-form ref="ruleForm" :model="tableForm" :label-width="labelWidth">
+      <el-row :gutter="20">
+        <el-col v-for="(item, index) in formItem" :key="index" :span="formType == 'horizontal' ? formSpan : 24">
+          <el-form-item :rules="fromDataReq(item)" :prop="item.columncode" :label="item.columnname">
+            <template v-if="item.dropdownlist ||item.dropdownlist == 0">
+              <el-select class="input-shadow" size="small" filterable default-first-option style="width: 100%" v-model="tableForm[item.columncode]" @change="changeSelect(item.columncode, item)" placeholder="请选择" clearable @clear="tableForm[item.columncode] = ''">
+                <el-option v-for="itemParams in tableOptions[item.columncode]" :key="itemParams.pageconfigurationid" :label="itemParams.pagename" :value="itemParams.pageconfigurationid">
+                </el-option>
+              </el-select>
+            </template>
+            <template v-else-if="fromDataType(item.datatype) == 'text'||fromDataType(item.datatype) == 'VARCHAR'">
+              <el-input size="small" @change="inputChangeHandler(item.columncode)" v-model="tableForm[item.columncode]"></el-input>
+            </template>
+            <template v-else-if="fromDataType(item.datatype) == 'date'">
+              <el-date-picker class="datetimes" value-format="yyyy-MM-dd" v-model="tableForm[item.columncode]" type="date" placeholder="选择日期" @change="inputChangeHandler(item.columncode)">
+              </el-date-picker>
+            </template>
+            <template v-else-if="fromDataType(item.datatype) == 'datetime'">
+              <el-date-picker class="datetimes" value-format="yyyy-MM-dd HH:mm:ss" v-model="tableForm[item.columncode]" type="datetime" placeholder="选择日期时间" @change="inputChangeHandler(item.columncode)">
+              </el-date-picker>
+            </template>
+            <template v-else-if="fromDataType(item.datatype) == 'INT' || fromDataType(item.datatype) == 'tinyint'">
+              <el-input size="small" v-model.number="tableForm[item.columncode]" onkeyup="value=value.replace(/[^1-9]/g,'')" @change="inputChangeHandler(item.columncode)"></el-input>
+            </template>
+            <template v-else>
+              <el-input size="small" v-model="tableForm[item.columncode]" @change="inputChangeHandler(item.columncode)"></el-input>
+            </template>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { Query } from "@/api/webApi"
+export default {
+  name: 'PublicPageForm',
+  props: {
+    formType: {
+      type: String,
+      default: 'vertical' //horizontal--水平布局 默认一行3列
+    },
+    formItem: {
+      type: Array,
+      default: () => new Array()
+    },
+    formData: {
+      type: Object,
+      default: () => new Object()
+    },
+    formSpan: {
+      type: Number,
+      default: 8
+    },
+    labelWidth: {
+      type: String,
+      default: '80px'
+    }
+  },
+  data () {
+    return {
+      tableForm: {},
+      tableOptions: {}
+    }
+  },
+  watch: {
+    formItem: {
+      handler (array) {
+        this.getSelectData(array)
+      },
+      deep: true
+    },
+    formData: {
+      handler (obj) {
+        this.tableForm = obj
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  computed: {
+    //设置新增修改表单类型
+    fromDataType () {
+      return function (type) {
+        if (type) {
+          return type.replace(/\([^\)]*\)/g, "");
+        }
+      }
+    },
+    //设置新增修改表单必填类型
+    fromDataReq () {
+      return function (item) {
+        const { dropdownlist, datatype, columnname, isrequired, formatrule } = item
+        const itemType = datatype.replace(/\([^\)]*\)/g, "")
+        const itemReq = isrequired ? true : false
+        const itemRule = formatrule ? true : false
+        if (dropdownlist || dropdownlist == 0) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'change' }]
+        else if (itemType == 'date' || itemType == 'datetime') return [{ required: itemReq, type: 'date', message: `${columnname}不能为空`, trigger: 'change' }]
+        else
+          if (itemReq && itemRule) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }, { pattern: new RegExp(formatrule), message: `请输入合法的${columnname}规则`, trigger: 'blur' }]
+        return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }]
+      }
+    },
+  },
+  methods: {
+    //获取表单下拉数据
+    getSelectData (formItem = []) {
+      if (!formItem.length || !Array.isArray(formItem)) return
+      const formItemCopy = _.cloneDeep(formItem)
+      formItemCopy.map(async ({ dropdownlist, columncode }) => {
+        if (dropdownlist || dropdownlist == 0) {
+          const datacontent = { filter: { 1: 1 } }
+          const { code, returnData } = await Query({ serviceid: dropdownlist, datacontent, event: '0' })
+          this.tableOptions[columncode] = code == 0 && returnData?.length ? returnData : []
+        }
+      })
+    },
+    //获取表单下拉数据
+    changeSelect (code, item) { },
+    inputChangeHandler (data) {
+      if (!this.tableForm[data]) this.tableForm[data] = null
+    },
+    restForm () {
+      this.$refs['ruleForm'].resetFields()
+    },
+    // 新增/编辑-确认
+    submitClickHandler () {
+      let flag = false
+      this.$refs["ruleForm"].validate((valid) => {
+        if (valid) {
+          flag = true
+        } else {
+          flag = false;
+        }
+      });
+      return flag
+    }
+  }
+}
+</script>

+ 15 - 95
src/views/dataAccessPage/index.vue

@@ -65,91 +65,10 @@
         <div class="newService-content-right-top">
           <div class="flex">
             <div class="title">服务配置 {{ dataObj.servicename }}</div>
-            <el-button type="primary" @click="handleSave" :disabled="flag" class="bcButton" size="small">保存</el-button>
+            <el-button type="primary" @click="handleSave" :disabled="flag" size="small">保存</el-button>
           </div>
           <div class="demo-form">
-            <el-form :model="formInline" label-width="80px">
-              <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="服务名称">
-                    <el-input clearable v-model="formInline.servicename" :disabled="activeIndex == null" size="small" placeholder="请输入服务名称"></el-input>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="6">
-                  <el-form-item label="服务类型">
-                    <el-select style="width:100%" clearable v-model="formInline.servicetypeid" :disabled="activeIndex == null" size="small" placeholder="请选择服务类型">
-                      <el-option v-for="(item,index) in servicetype" :key="index" :label="item.label" :value="item.value"></el-option>
-                    </el-select>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="6">
-                  <el-form-item label="容器ID">
-                    <el-select style="width:100%" :disabled="activeIndex == null" clearable size="small" v-model="formInline.containerid" placeholder="请选择容器ID">
-                      <el-option v-for="(item,index) in jqList" :key="index" :label="item.containername" :value="item.containerid"></el-option>
-                    </el-select>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </el-form>
-          </div>
-          <div class="cj-form">
-            <el-form :model="formInline" label-width="80px">
-              <el-row :gutter="20">
-                <el-col :span="6">
-                  <el-form-item label="采集类型">
-                    <el-select style="width:100%" size="small" :disabled="formInline.servicetype == 1 || activeIndex == null" v-model="formInline.tasktype" placeholder="请选择采集类型">
-                      <el-option label="CRON表达式" :value="0"></el-option>
-                      <el-option label="轮询方式" :value="1"></el-option>
-                    </el-select>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="6">
-                  <el-form-item label="循环次数 ">
-                    <el-input style="width: 100%;" :disabled="checkStatus(formInline)" clearable v-model="formInline.loopcount" size="small" placeholder="循环次数"></el-input>
-                  </el-form-item>
-                </el-col>
-                <template v-if="formInline.tasktype == 0">
-                  <el-col :span="6">
-                    <el-form-item label-width="100px" label="CRON表达式">
-                      <el-input :disabled="checkStatus(formInline)" clearable v-model="formInline.cronexpress" size="small" placeholder="请输入CRON表达式"></el-input>
-                    </el-form-item>
-                  </el-col>
-                  <el-col :span="6">
-                    <el-form-item label="有效时间" prop="startTime">
-                      <el-date-picker :disabled="checkStatus(formInline)" style="width: 100%;" size="small" v-model="formInline.taskValid" type="datetime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" placeholder="有效时间" />
-                    </el-form-item>
-                  </el-col>
-                </template>
-                <template v-else>
-                  <el-col :span="6">
-                    <el-form-item label="采集频率">
-                      <el-input :disabled="checkStatus(formInline)" style="width: 100%;" clearable v-model="formInline.frequencyCount" size="small" placeholder="请输入采集频率"></el-input>
-                    </el-form-item>
-                  </el-col>
-                  <el-col :span="6">
-                    <el-form-item label="频率单位">
-                      <el-select :disabled="checkStatus(formInline)" style="width: 100%;" clearable size="small" v-model="formInline.frequencyUnit" placeholder="请选择频率单位">
-                        <el-option label="毫秒" :value="1"></el-option>
-                        <el-option label="秒" :value="1000"></el-option>
-                        <el-option label="分钟" :value="60000"></el-option>
-                        <el-option label="小时" :value="3600000"></el-option>
-                      </el-select>
-                    </el-form-item>
-                  </el-col>
-                </template>
-              </el-row>
-              <el-row :gutter="20">
-                <el-col v-if="formInline.tasktype == 1" :span="6"><el-form-item label="有效时间" prop="starttime">
-                    <el-date-picker :disabled="checkStatus(formInline)" style="width: 100%;" size="small" v-model="formInline.taskValid" type="datetime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" placeholder="有效时间" />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="6">
-                  <el-form-item label="失效时间" prop="stoptime">
-                    <el-date-picker :disabled="checkStatus(formInline)" style="width: 100%;" size="small" v-model="formInline.taskInvalid" type="datetime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" placeholder="有效时间" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </el-form>
+            <PublicPageForm :form-item="jqList" labelWidth="200px" form-type="horizontal" />
           </div>
         </div>
         <div style="height: calc(100% - 280px);overflow: hidden;" class="newService-content-right-bottom">
@@ -175,6 +94,7 @@
 
 <script>
 import Table from '@/views/tablePage/index.vue'
+import PublicPageForm from '@/components/publicPageForm'
 import Dialog from "@/layout/components/Dialog/index.vue"
 import { Query, newData, modifyData, moveData, start, stop } from "@/api/webApi"
 import pf from '@/layout/mixin/publicFunc'
@@ -182,7 +102,7 @@ import * as _ from 'lodash'
 export default {
   name: 'NewService',
   mixins: [pf],
-  components: { Table, Dialog },
+  components: { Table, Dialog, PublicPageForm },
   data () {
     return {
       title: '服务设置',
@@ -193,14 +113,14 @@ export default {
       formInline: {
         servicename: '',
         servicetype: '',
-        workid: '',
-        loopCount: '',
+        containerid: '',
+        loopcount: '',
         frequencyCount: '',
         frequencyUnit: '',
         taskValid: '',
         taskInvalid: '',
-        taskType: '',
-        cronExpress: ''
+        tasktype: '',
+        cronexpress: ''
       },
       servicetype: [
         {
@@ -231,11 +151,11 @@ export default {
   },
   computed: {
     dataList () {
-      return this.arrs.filter(data => !this.search || data.serviceName.toLowerCase().includes(this.search.toLowerCase()))
+      return this.arrs.filter(data => !this.search || data.servicename.toLowerCase().includes(this.search.toLowerCase()))
     },
     checkStatus () {
       return function (formInline) {
-        return (formInline.serviceType && formInline.taskType) || (formInline.serviceType && formInline.taskType == 0) ? false : true
+        return (formInline.servicetype && formInline.tasktype) || (formInline.servicetype && formInline.tasktype == 0) ? false : true
       }
     }
   },
@@ -244,7 +164,7 @@ export default {
     this.title = title
     this.queryId = qid
     this.getQuery(qid)
-    this.getMsgList(11)
+    this.getMsgList(14)
   },
   updated () {
     this.scrollDown()
@@ -287,13 +207,13 @@ export default {
     async getMsgList (id) {
       try {
         const { code, returnData } = await Query({
-          serviceid: id,
-          page: 1,
-          datacontent: { filter: { 1: 1 } },
+          serviceid: '3',
+          datacontent: { filter: { pagecode: 'serviceinfoManagementTable', serviceid: id } },
           event: '0'
         })
         if (code == 0) {
-          this.jqList = returnData
+          const formItemCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay == 2 || item.isdisplay == 3);
+          this.jqList = _.orderBy(formItemCopy, ['displaynumber'], ['asc']);
         }
       } catch (error) {
         this.jqList = []

+ 6 - 80
src/views/tablePage/index.vue

@@ -15,37 +15,7 @@
     <div class="TablePage_dialog">
       <!--新增/编辑-->
       <PublicPageDialog :dialog-title="tableTitle" dialogSize="630px" :dialog-drawer="flag" @handleClose="submitClickClose('ruleForm')" @handleSubmit="submitClickHandler">
-        <el-form ref="ruleForm" :model="tableForm" :label-width="labelWidth">
-          <el-row :gutter="20">
-            <el-col v-for="(item, index) in formItem" :key="index" :span="24">
-              <el-form-item :rules="fromDataReq(item)" :prop="item.columncode" :label="item.columnname">
-                <template v-if="item.dropdownlist ||item.dropdownlist == 0">
-                  <el-select class="input-shadow" size="small" filterable default-first-option style="width: 100%" v-model="tableForm[item.columncode]" @change="changeSelect(item.columncode, item)" placeholder="请选择" clearable @clear="tableForm[item.columncode] = ''">
-                    <el-option v-for="itemParams in tableOptions[item.columncode]" :key="itemParams.pageconfigurationid" :label="itemParams.pagename" :value="itemParams.pageconfigurationid">
-                    </el-option>
-                  </el-select>
-                </template>
-                <template v-else-if="fromDataType(item.datatype) == 'text'||fromDataType(item.datatype) == 'VARCHAR'">
-                  <el-input size="small" @change="inputChangeHandler(item.columncode)" v-model="tableForm[item.columncode]"></el-input>
-                </template>
-                <template v-else-if="fromDataType(item.datatype) == 'date'">
-                  <el-date-picker class="datetimes" value-format="yyyy-MM-dd" v-model="tableForm[item.columncode]" type="date" placeholder="选择日期" @change="inputChangeHandler(item.columncode)">
-                  </el-date-picker>
-                </template>
-                <template v-else-if="fromDataType(item.datatype) == 'datetime'">
-                  <el-date-picker class="datetimes" value-format="yyyy-MM-dd HH:mm:ss" v-model="tableForm[item.columncode]" type="datetime" placeholder="选择日期时间" @change="inputChangeHandler(item.columncode)">
-                  </el-date-picker>
-                </template>
-                <template v-else-if="fromDataType(item.datatype) == 'INT' || fromDataType(item.datatype) == 'tinyint'">
-                  <el-input size="small" v-model.number="tableForm[item.columncode]" onkeyup="value=value.replace(/[^1-9]/g,'')" @change="inputChangeHandler(item.columncode)"></el-input>
-                </template>
-                <template v-else>
-                  <el-input size="small" v-model="tableForm[item.columncode]" @change="inputChangeHandler(item.columncode)"></el-input>
-                </template>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
+        <PublicPageForm ref="ruleForm" :label-width="labelWidth" :form-item="formItem" :form-data="tableForm" />
       </PublicPageDialog>
       <!--删除-->
       <PublicPageDialog dialog-title="删除" :dialog-drawer="rmFlag" @handleClose="rmFlag = false" @handleSubmit="tableRemove">
@@ -70,6 +40,7 @@ import PublicPageHeader from '@/components/PublicPageHeader'
 import PublicPageTable from '@/components/SimpleTable'
 import PublicPageTree from '@/components/publicPageTree'
 import PublicPageDialog from '@/components/PublicPageDialog'
+import PublicPageForm from '@/components/publicPageForm'
 import AdvancedQuery from '@/components/AdvancedQuery'
 import AuthButton from '@/components/AuthButton'
 import { mapGetters } from 'vuex'
@@ -77,7 +48,7 @@ import { Query, newData, modifyData, moveData } from "@/api/webApi"
 
 export default {
   name: 'TablePage',
-  components: { PublicPageHeader, PublicPageTable, PublicPageDialog, PublicPageTree, AdvancedQuery, AuthButton },
+  components: { PublicPageHeader, PublicPageTable, PublicPageDialog, PublicPageTree, PublicPageForm, AdvancedQuery, AuthButton },
   props: {
     dataTitle: {
       type: String,
@@ -144,28 +115,6 @@ export default {
     pageAuthBtnOther () {
       return this.tableBtns.filter(item => item.servicetype == 5)[0]
     },
-    //设置新增修改表单类型
-    fromDataType () {
-      return function (type) {
-        if (type) {
-          return type.replace(/\([^\)]*\)/g, "");
-        }
-      }
-    },
-    //设置新增修改表单必填类型
-    fromDataReq () {
-      return function (item) {
-        const { dropdownlist, datatype, columnname, isrequired, formatrule } = item
-        const itemType = datatype.replace(/\([^\)]*\)/g, "")
-        const itemReq = isrequired ? true : false
-        const itemRule = formatrule ? true : false
-        if (dropdownlist || dropdownlist == 0) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'change' }]
-        else if (itemType == 'date' || itemType == 'datetime') return [{ required: itemReq, type: 'date', message: `${columnname}不能为空`, trigger: 'change' }]
-        else
-          if (itemReq && itemRule) return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }, { pattern: new RegExp(formatrule), message: `请输入合法的${columnname}规则`, trigger: 'blur' }]
-        return [{ required: itemReq, message: `${columnname}不能为空`, trigger: 'blur' }]
-      }
-    },
   },
   mounted () {
     this.pageInit()
@@ -234,7 +183,6 @@ export default {
             const formItemCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay == 2 || item.isdisplay == 3);
             this.formItem = _.orderBy(formItemCopy, ['displaynumber'], ['asc']);
             this.tableCols = tableColsCopyOrder;
-            this.getSelectData(this.formItem)
           }
         } else {
           this.$message.error("获取表头数据失败");
@@ -243,18 +191,6 @@ export default {
         console.log(error)
       }
     },
-    //获取表单下拉数据
-    getSelectData (formItem = []) {
-      if (!formItem.length || !Array.isArray(formItem)) return
-      const formItemCopy = _.cloneDeep(formItem)
-      formItemCopy.map(async ({ dropdownlist, columncode }) => {
-        if (dropdownlist || dropdownlist == 0) {
-          const datacontent = { filter: { 1: 1 } }
-          const { code, returnData } = await Query({ serviceid: dropdownlist, datacontent, event: '0' })
-          this.tableOptions[columncode] = code == 0 && returnData?.length ? returnData : []
-        }
-      })
-    },
     //获取tree点击
     treeNodeClick (data) {
       const filterItem = this.formatDefault(this.treeParameters, data)
@@ -274,11 +210,6 @@ export default {
       })
       return filterItem
     },
-    //获取表单下拉数据
-    changeSelect (code, item) { },
-    inputChangeHandler (data) {
-      if (!this.tableForm[data]) this.tableForm[data] = null
-    },
     //表单-新增
     handleAdd () {
       const { openmode, pageroute } = this.pageAuthBtnAdd
@@ -322,17 +253,12 @@ export default {
     // 新增/编辑-取消
     submitClickClose (formName) {
       this.flag = false
-      this.$refs[formName].resetFields()
+      this.$refs[formName].restForm()
     },
     // 新增/编辑-确认
     submitClickHandler () {
-      this.$refs["ruleForm"].validate((valid) => {
-        if (valid) {
-          this.tableType == "add" ? this.generalDataReception(1, this.tableForm) : this.generalDataReception(2, this.tableForm)
-        } else {
-          return false;
-        }
-      });
+      const flag = this.$refs["ruleForm"].submitClickHandler()
+      if (flag) this.tableType == "add" ? this.generalDataReception(1, this.tableForm) : this.generalDataReception(2, this.tableForm)
     },
     formatChange (data, event, key) {
       const datas = []