johnsen 9 месяцев назад
Родитель
Сommit
90150bb68e

+ 0 - 43
src/api/platform/data/dataTemplate.js

@@ -158,49 +158,6 @@ export function querySelectorData(params) {
  * @param {*} params
  */
 export function queryDataByKey(params) {
-  // params = {
-  //   parameters: [
-  //     {
-  //       "relation": "AND",
-  //       "parameters": [
-  //         {
-  //           "relation": "OR",
-  //           "parameters": [
-  //             {
-  //               "key": "Q^bian_zhi_bu_men_^SL",
-  //               "value": "1257661032474607616",
-  //               "param": "e1b7f43a-3133-4e31-b81f-b3adf6af902f"
-  //             },
-  //             {
-  //               "key": "Q^bian_zhi_bu_men_^SL",
-  //               "value": "1259815355627339776",
-  //               "param": "86031690-fa6d-4919-8169-9771486d44c8"
-  //             }
-  //           ]
-  //         },
-  //         {
-  //           "relation": "OR",
-  //           "parameters": [
-  //             {
-  //               "key": "Q^shi_fou_guo_shen_^SL",
-  //               "value": "待处理",
-  //               "param": "754f9972-9d07-4581-bbcd-5440fa408d09"
-  //             }
-  //           ]
-  //         }
-  //       ]
-  //     },
-  //     {
-  //       "key": "filter_condition_key",
-  //       "value": ""
-  //     }
-  //   ],
-  //   requestPage: {
-  //     "pageNo": 1,
-  //     "limit": 20,
-  //     "totalCount": 27849
-  //   }
-  // }
   return request({
     url: DATA_URL() + '/data/template/queryDataByKey',
     method: 'post',

+ 3 - 3
src/business/platform/form/dynamic-form/form-table.vue

@@ -506,7 +506,7 @@ export default {
     value: {
       deep: true,
       immediate: true,
-      handler(val, oldVal) {
+      handler(val) {
         this.dataModel = val
         val &&
           val.forEach &&
@@ -518,7 +518,7 @@ export default {
     },
     dataModel: {
       deep: true,
-      handler(val, oldVal) {
+      handler(val) {
         this.$emit('update:value', val)
       }
     },
@@ -666,7 +666,7 @@ export default {
     handleSelectionChange(selection) {
       this.multipleSelection = selection
     },
-    handleRowClick(row, event, column) {
+    handleRowClick(row) {
       this.$refs.elTable.toggleRowSelection(row)
     },
     filterButtons(position) {

+ 6 - 4
src/utils/action.js

@@ -457,10 +457,12 @@ const action = {
     const results = {}
     if (params) {
       results.parameters = Object.keys(params).map((k) => {
-        return {
-          key: k,
-          value: params[k] ? params[k] : ''
-        }
+        return k === 'arg'
+          ? params[k]
+          : {
+            key: k,
+            value: params[k]
+          }
       })
     }
     if (pagination) {

+ 60 - 23
src/views/platform/data/dataTemplate/field-formatter.vue

@@ -8,7 +8,7 @@
       :readonly="true"
     />
     <!-- 选择器 -->
-    <template v-else-if="selectTypes.includes(this.newFieldType)">
+    <template v-else-if="selectTypes.includes(newFieldType)">
       <van-tag
         v-for="(item, index) in selectorValue"
         :key="item"
@@ -39,9 +39,12 @@ import { get as getPositionById } from '@/api/platform/org/position'
 import { get as getRoleById } from '@/api/platform/org/role'
 import { get as getAttachmentById } from '@/api/platform/file/attachment'
 import { remoteRequest } from '@/utils/remote'
+import ActionUtils from '@/utils/action'
 import {
   transferByIds as getDataById,
-  queryLinkageData as getLinkDataByKey
+  queryLinkageData as getLinkDataByKey,
+  queryDataTable,
+  getByKey
 } from '@/api/platform/data/dataTemplate'
 // import {
 //   loadDataTemplateByKey,
@@ -52,7 +55,7 @@ var WorldDistricts = null
 var DICTIONARY_CACHE = {}
 var ATTACHMENT_CACHE = {}
 var SELECTOR_CACHE = {}
-var LINK_CACHE = {}
+// var LINK_CACHE = {}
 
 // var DATA_KEY = {
 //   ID: '#id#',
@@ -102,14 +105,6 @@ export default {
       selectTypes: ['selector', 'currentUser', 'currentOrg']
     }
   },
-  watch: {
-    data() {
-      this.initData()
-    },
-    labelKey() {
-      this.initData()
-    }
-  },
   computed: {
     selectorValue() {
       if (this.selectTypes.includes(this.newFieldType)) {
@@ -118,6 +113,14 @@ export default {
       return []
     }
   },
+  watch: {
+    data() {
+      this.initData()
+    },
+    labelKey() {
+      this.initData()
+    }
+  },
   mounted: function () {
     this.initData()
   },
@@ -189,7 +192,7 @@ export default {
         this.formatterCustomDialog(value, fieldOptions)
         return
       }
-      // console.log('fieldType==>', fieldType)
+      // console.log('fieldOptions==>', this.labelKey, fieldOptions)
       switch (fieldType) {
         case 'hidden':
         case 'text':
@@ -297,7 +300,7 @@ export default {
           'name'
         )
       } else {
-        remoteRequest('dataTemplate', { id }, () => {
+        remoteRequest('dataTemplate', { id: key }, () => {
           return getDictionaryData({
             typeKey: key
           })
@@ -555,24 +558,58 @@ export default {
       }
     },
     formatterLinkdata(value, fieldOptions) {
+      this.label = value
       // console.log('fieldOptions===>', fieldOptions)
-      const linkConfig = fieldOptions['link_config'] || {}
-      const __key = fieldOptions['linkdata']
-      const __linkKey = linkConfig.id || 'id_'
-      const __linkText = linkConfig.text || 'name_'
-      this.label = this.getLinkdataValue(__key, __linkKey, __linkText, value)
+      // const linkConfig = fieldOptions['link_config'] || {}
+      // const __key = fieldOptions['linkdata']
+      // const __linkKey = linkConfig.id || 'id_'
+      // const __linkText = linkConfig.text || 'name_'
+      // this.getLinkdataValue(__key, __linkKey, __linkText, value)
+    },
+    async getRemoteDataTemplateFunc(templateKey) {
+      return remoteRequest('dataTemplate1', templateKey, () => {
+        return getByKey({ dataTemplateKey: templateKey })
+      })
     },
-    getLinkdataValue(key, __linkKey, __linkText, value) {
+    /**
+     * 获取格式化参数
+     */
+    async getFormatParams(key, __linkKey) {
+      let formParams = {}
+      const res = await this.getRemoteDataTemplateFunc(key)
+      const data = JSON.parse(res.data)
+      if (!data.templates) return {}
+      const template = data.templates[0]
+      console.log('data1111111111====>', this.templateFields)
+      const responseData = JSON.parse(JSON.stringify(template))
+      responseData.datasetKey = data.datasetKey
+      responseData.unique = __linkKey
+      responseData['key'] = key
+      responseData['dynamic_params'] = {}
+      formParams['response_data'] = JSON.stringify(responseData)
+      formParams['filter_condition_key'] = JSON.stringify({
+        key: 'filter_condition_key',
+        value: ''
+      })
+      return ActionUtils.formatParams(formParams)
+    },
+    async getLinkdataValue(key, __linkKey, __linkText, value) {
       if (this.$utils.isEmpty(key)) {
         return value
       }
       // TODO: 有问题
-      remoteRequest('dataTemplate', { key }, () => {
-        return getLinkDataByKey({ key: key })
+      // const a = await this.getFormatParams(key)
+      console.log('getFormatParams===>', __linkKey)
+      remoteRequest('dataTemplate', { key }, async () => {
+        const params = await this.getFormatParams(key, __linkKey)
+        return queryDataTable(params)
       })
         .then((response) => {
-          const data = response.data
-          this.label = data[__linkText]
+          const item = response.data.dataResult.find(
+            (t) => t[__linkKey] === value
+          )
+          console.log('item====>', item)
+          this.label = item ? item[__linkText] : '/'
         })
         .catch((e) => {
           console.error(e)

+ 213 - 15
src/views/platform/data/template-list.vue

@@ -19,7 +19,7 @@
         v-model="search"
         :placeholder="$utils.isNotEmpty(queryName) ? '请输入' + queryName : ''"
         show-action
-        @search="onSearch"
+        @search="() => onSearch()"
       >
         <template
           v-if="$utils.isNotEmpty(queryColumns) && queryColumns.length > 1"
@@ -220,6 +220,7 @@
     />
 
     <ibps-more-search
+      ref="searchForm"
       :show="popupShow"
       :search-forms="searchForms"
       @callback="onSearch"
@@ -256,7 +257,10 @@
               size="large"
             >
               <template #right-icon>
-                <van-checkbox :name="item.name" />
+                <van-checkbox
+                  :name="item.name"
+                  :disabled="item.isTitle === 'Y'"
+                />
               </template>
               <!-- <van-checkbox :name="item.name">{{ item.name }}</van-checkbox> -->
             </van-cell>
@@ -269,7 +273,7 @@
       ref="formrender"
       :visible="dialogFormVisible"
       :params="formrenderParams"
-      :addDataCont="addDataCont"
+      :add-data-cont="addDataCont"
       @callback="onRefreshCallback"
       @close="(visible) => (dialogFormVisible = visible)"
     />
@@ -277,7 +281,7 @@
 </template>
 <script>
 import {
-  queryDataByKey,
+  queryDataTable,
   removeFormData
 } from '@/api/platform/data/dataTemplate'
 import {
@@ -309,7 +313,7 @@ import DataTemplateFormrenderDialog from '@/business/platform/data/form/dialog'
 import IbpsPickerToolbar from '@/components/ibps-picker-toolbar'
 
 export default {
-  name: 'template-list',
+  name: 'TemplateList',
   components: {
     // DropMenu,
     SearchField,
@@ -384,11 +388,15 @@ export default {
       defaultManages: [],
       isInitialization: false,
       columnsAttrs: [],
+      pkKey: 'id_',
       loadData: () => {},
       // 表单
       dialogFormVisible: false,
       formrenderParams: {},
-      defaultFilterListCol: ['di_dian_']
+      defaultFilterListCol: ['di_dian_'],
+      nameParams: {},
+      format: {},
+      datePrefix: 'daterange-prefix'
     }
   },
   computed: {
@@ -410,8 +418,8 @@ export default {
       return this.$store.getters.mainPosition
         ? this.$store.getters.mainPosition
         : this.$store.getters.position
-          ? this.$store.getters.position[0]
-          : { id: '' }
+        ? this.$store.getters.position[0]
+        : { id: '' }
     },
     toolbarButtons() {
       return this.toolbars.length > 4
@@ -606,9 +614,16 @@ export default {
       )
 
       if (this.$utils.isNotEmpty(fieldsList)) {
+        let flag = false
         this.fieldsList = fieldsList.map((i) => {
-          return { name: i.label }
+          if (i.isTitle === 'Y') {
+            flag = true
+          }
+          return { name: i.label, isTitle: i.isTitle }
         })
+        if (!flag) {
+          this.fieldsList[0].isTitle = 'Y'
+        }
       } else {
         this.$toast('显示字段不能为空!请在PC端中配置。')
       }
@@ -674,7 +689,8 @@ export default {
               columns[match.index] = match.data
             }
           }
-          const titleCol = columns.find((t) => t.isTitle === 'Y')
+          console.log('columns--->')
+          const titleCol = columns.find((t) => t && t.isTitle === 'Y')
           // 列表标题无设置则默认第一列
           this.labelField = titleCol || columns[0]
           this.columnsAttrs = columns
@@ -706,7 +722,7 @@ export default {
       return fieldOptions['datefmt'] || FormOptions.t.DATE_FORMATS['date']
     },
     onSearch(params = {}) {
-      // console.log('params===>', params)
+      console.log('params===>', params)
       this.stateActive = false
       ActionUtils.initListData(this)
       this.checkedIds = []
@@ -810,8 +826,8 @@ export default {
       // params['Q^bian_zhi_bu_men_^SL'] = this.ownsDeptInfo.id
       // params['Q^shi_fou_guo_shen_^SL'] = '待处理'
       // 加载数据
-
-      queryDataByKey(ActionUtils.formatParams(params, this.pagination))
+      console.log('this.getFormatParams()==>', this.getFormatParams())
+      queryDataTable(this.getFormatParams())
         .then((response) => {
           const responseData = response.data
           if (this.isTree) {
@@ -829,8 +845,6 @@ export default {
           } else {
             if (!this.finished) {
               // 如果又自定义对话框
-              if (customDialogCols.length > 0) {
-              }
               // 处理数据
               ActionUtils.handleListData(this, responseData)
             }
@@ -840,9 +854,133 @@ export default {
           ActionUtils.handleErrorData(this, e)
         })
     },
+    /**
+     * 获取格式化参数
+     */
+    getFormatParams() {
+      let formParams = this.getSearcFormData()
+      console.log('formParams--===>', formParams)
+      const responseData = JSON.parse(JSON.stringify(this.template))
+      responseData.datasetKey = this.dataTemplate.datasetKey
+      responseData.unique = this.pkKey
+      // todo
+      responseData['dynamic_params'] = null
+      formParams['response_data'] = JSON.stringify(responseData)
+      formParams['filter_condition_key'] = this.checkFilter
+      return ActionUtils.formatParams(formParams, this.pagination, [])
+    },
+    /**
+     *{
+        "relation": "AND",
+        "parameters": [
+          {
+            "relation": "OR",
+            "parameters": [
+              {
+                "key": "Q^shi_fou_guo_shen_^SL",
+                "value": "待处理",
+                "param": "6eece135-665b-41b5-8728-7815368eac10"
+              }
+            ]
+          }
+        ]
+      }
+     */
+    /**
+     * {
+        "key": "arg",
+        "value": {
+          "relation": "AND",
+          "parameters": [
+            {
+              "relation": "AND",
+              "parameters": [
+                {
+                  "key": "Q^shi_fou_guo_shen_^SL",
+                  "value": "待处理",
+                  "param": "77270486-245b-4b6b-b203-60ee853f86dc"
+                }
+              ]
+            }
+          ]
+        }
+      }
+     */
+    getSearcFormData() {
+      let { searchParams: params, nameParams, datePrefix, format } = this
+      params = JSON.parse(JSON.stringify(params))
+      // console.log('params-=-->', params)
+      if (this.$utils.isNotEmpty(this.search) && this.queryKey) {
+        params[this.queryKey] = this.search
+      }
+      // params[this.queryKey] = this.search
+      // 剔除params里相同字段既有日期的筛选条件,又有重复的模糊查询条件,只保留日期的
+      for (const i of Object.keys(params)) {
+        const slic = i.slice(2)
+        const name = slic.substring(0, slic.indexOf('^'))
+        const hadName = Object.keys(params).filter((item) => {
+          return item.indexOf(name) > -1
+        })
+        if (name && hadName.length > 2) {
+          delete params[`Q^${name}^SL`]
+        }
+      }
+      const formattedForm = {
+        arg: {
+          relation: 'AND',
+          parameters: []
+        }
+      }
+      Object.keys(params).forEach((v) => {
+        if (v && v.indexOf(datePrefix) === -1) {
+          const val = format[v] ? format[v](params[v], v) : params[v]
+          if (this.$utils.isNotEmpty(val)) {
+            const key = nameParams[v] || v
+            if (!Array.isArray(val)) {
+              const valArr = val.split(',')
+              if (valArr.length > 1) {
+                const parameters = valArr.map((i) => ({
+                  key,
+                  value: i,
+                  param: this.$utils.guid()
+                }))
+                formattedForm.arg.parameters.push({
+                  relation: 'OR',
+                  parameters
+                })
+              } else {
+                const o = {
+                  relation: 'AND',
+                  parameters: [
+                    {
+                      key,
+                      value: val,
+                      param: this.$utils.guid()
+                    }
+                  ]
+                }
+                formattedForm.arg.parameters.push(o)
+              }
+            } else {
+              const parameters = val.map((i) => ({
+                key,
+                value: i,
+                param: this.$utils.guid()
+              }))
+              formattedForm.arg.parameters.push({
+                relation: 'OR',
+                parameters
+              })
+            }
+          }
+        }
+      })
+      return formattedForm.arg.parameters.length ? formattedForm : {}
+    },
     // 默认显示字段列表
     initOptions(list) {
       list.forEach((val, index) => {
+        console.log('tttt==>', val)
         if (this.configKey === '') {
           this.chooseResult.push(val.label)
         }
@@ -1231,6 +1369,7 @@ export default {
       })
       console.log('this.slotForms====>', this.slotForms)
       this.searchForms.forms = columns
+      this.buildSearchParams(columns)
       // 顶部查询条件
       this.queryColumns = queryColumnsData || []
       const queryColumn = this.$utils.isNotEmpty(this.queryColumns)
@@ -1240,6 +1379,64 @@ export default {
       this.queryName = queryColumn.label || ''
       this.fieldType = queryColumn.fieldType || ''
     },
+    buildSearchParams(forms) {
+      const datePrefix = 'daterange-prefix'
+      const selectOptionPrefix = 'select-option-prefix'
+      const dataObj = {
+        selectOptions: {}
+      }
+      console.log('forms====>', forms)
+      const params = {}
+      const nameParams = {}
+      const format = {}
+      forms.forEach((v, i) => {
+        const propType = typeof v.prop
+        if (propType === 'string') {
+          v.modelValue = v.prop
+          params[v.prop] = v.value || ''
+          if (v.name) {
+            nameParams[v.prop] = v.name
+          }
+          if (v.format) {
+            format[v.prop] = v.format
+          }
+        } else if (
+          propType === 'object' &&
+          Object.prototype.toString.call(v.prop) === '[object Array]'
+        ) {
+          v.prop.forEach((vv, j) => {
+            params[vv] = vv.value || ''
+            if (v.name) {
+              nameParams[vv] = v.name[j]
+            }
+            if (v.format) {
+              format[vv] = v.format
+            }
+          })
+        }
+        if (
+          v.fieldType === 'yearrange' ||
+          v.fieldType === 'monthrange' ||
+          v.fieldType === 'daterange' ||
+          v.fieldType === 'datetimerange' ||
+          v.fieldType === 'timerange' ||
+          v.fieldType === 'numberRange'
+        ) {
+          params[datePrefix + i] = v.fieldType === 'numberRange' ? [] : ''
+          v.modelValue = datePrefix + i
+        } else if (v.fieldType === 'select' && (v.selectFetch || v.selectUrl)) {
+          const dataKey = selectOptionPrefix + i
+          dataObj.selectOptions[dataKey] = []
+          if (!v.selectMethod) {
+            v.selectMethod = 'get'
+          }
+        }
+      })
+      this.params = params
+      this.nameParams = nameParams
+      this.datePrefix = datePrefix
+      this.format = format
+    },
     /**
      * 组合判断queryColumn最终形态
      * @param queryColumn queryColumn 列表查询区域的表单框集合
@@ -1602,6 +1799,7 @@ export default {
     },
     changeQuery(val, data) {
       this.queryName = data['label']
+      this.search = ''
     },
     /**
      * 初始化脚本