Explorar o código

同步主分支公用改动

cfort hai 1 ano
pai
achega
0c2a75be18
Modificáronse 25 ficheiros con 1329 adicións e 1155 borrados
  1. 1 0
      src/business/platform/bpmn/form/index.vue
  2. 112 110
      src/business/platform/cat/type/setting-type.vue
  3. 346 339
      src/business/platform/data/templatebuilder/right-aside/propertys/index.vue
  4. 12 11
      src/business/platform/data/templaterender/form/action.js
  5. 31 18
      src/business/platform/data/templaterender/templates/list.vue
  6. 417 412
      src/business/platform/form/formbuilder/right-aside/propertys/index.vue
  7. 1 1
      src/business/platform/form/formrender/dynamic-form/dynamic-form.vue
  8. 1 1
      src/components/ibps-crud/index.vue
  9. 29 2
      src/components/ibps-fullcalendar/index.vue
  10. 45 15
      src/utils/query.js
  11. 8 1
      src/views/component/facility/facilityData.vue
  12. 12 1
      src/views/component/facility/facilityDataDialog.vue
  13. 2 1
      src/views/component/inspectionProcess/uncertainty.vue
  14. 2 1
      src/views/component/qualityControl/index.vue
  15. 14 3
      src/views/component/shiftHandover/earlyHandover.vue
  16. 2 1
      src/views/component/supplier/assessment.vue
  17. 1 0
      src/views/platform/auth/appres/manage.vue
  18. 1 0
      src/views/platform/auth/resources/manage.vue
  19. 24 6
      src/views/platform/bpmn/bpmInstHis/list.vue
  20. 49 22
      src/views/platform/data/dataTemplate/template-list.vue
  21. 1 1
      src/views/platform/examination/exam/edit.vue
  22. 1 1
      src/views/platform/examination/questionBank/edit.vue
  23. 205 203
      src/views/platform/form/formDef/create.vue
  24. 2 1
      src/views/platform/office/bpmInitiatedProcess/myRequest.vue
  25. 10 4
      src/views/platform/org/employee/change-password.vue

+ 1 - 0
src/business/platform/bpmn/form/index.vue

@@ -10,6 +10,7 @@
                 :params="formParams"
                 :readonly="readonly"
                 :time-modification="timeModification_"
+                :add-data-cont="addDataCont"
                 @action-event="(actionKey, args) => emitEventHandler(actionKey, args)"
                 @callback="callbackPage"
                 @close="closeDialog"

+ 112 - 110
src/business/platform/cat/type/setting-type.vue

@@ -1,39 +1,41 @@
 <template>
-  <el-dialog
-    :title="title"
-    :visible.sync="dialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    class="dialog"
-    :class="className"
-    @close="closeDialog"
-    @open="handleSelectOptions(categoryKey)"
-  >
-    <el-form
-      ref="settingTypeForm"
-      v-loading="dialogLoading"
-      :model="formModel"
-      :element-loading-text="$t('common.loading')"
-      :label-width="formLabelWidth"
-      @submit.native.prevent
+    <el-dialog
+        :title="title"
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        append-to-body
+        class="dialog"
+        :class="className"
+        @close="closeDialog"
+        @open="handleSelectOptions(categoryKey)"
     >
-      <el-form-item label="设置分类">
-        <ibps-type-select
-          ref="ibpsTypeSelect"
-          v-model="formModel.typeId"
-          :category-key="categoryKey"
-          clearable
-        />
-      </el-form-item>
-    </el-form>
-    <div slot="footer" class="el-dialog--center">
-      <ibps-toolbar
-        :actions="toolbars"
-        @action-event="handleActionEvent"
-      />
-    </div>
-  </el-dialog>
+        <el-form
+            ref="settingTypeForm"
+            v-loading="dialogLoading"
+            :model="formModel"
+            :element-loading-text="$t('common.loading')"
+            :label-width="formLabelWidth"
+            @submit.native.prevent
+        >
+            <el-form-item label="设置分类">
+                <ibps-type-select
+                    ref="ibpsTypeSelect"
+                    v-model="formModel.typeId"
+                    :category-key="categoryKey"
+                    clearable
+                    filterable
+                    filter-label="name"
+                />
+            </el-form-item>
+        </el-form>
+        <div slot="footer" class="el-dialog--center">
+            <ibps-toolbar
+                :actions="toolbars"
+                @action-event="handleActionEvent"
+            />
+        </div>
+    </el-dialog>
 </template>
 
 <script>
@@ -41,88 +43,88 @@ import ActionUtils from '@/utils/action'
 import IbpsTypeSelect from '@/business/platform/cat/type/select'
 
 export default {
-  components: {
-    IbpsTypeSelect
-  },
-  props: {
-    className: String,
-    visible: {
-      type: Boolean,
-      default: false
+    components: {
+        IbpsTypeSelect
     },
-    title: {
-      type: String,
-      default: '设置分类'
+    props: {
+        className: String,
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        title: {
+            type: String,
+            default: '设置分类'
+        },
+        categoryKey: String
     },
-    categoryKey: String
-  },
-  data() {
-    return {
-      formName: 'settingTypeForm',
-      formLabelWidth: '120px',
-      dialogVisible: this.visible,
-      dialogLoading: false,
-      formModel: {
-        typeId: ''
-      },
-      rules: {},
-      toolbars: [
-        { key: 'save' },
-        { key: 'cancel' }
-      ]
-    }
-  },
-  computed: {
-    formId() {
-      return this.id
-    }
-  },
-  watch: {
-    visible: {
-      handler: function(val, oldVal) {
-        this.dialogVisible = this.visible
-        if (this.visible) this.formModel.typeId = []
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    handleActionEvent({ key }) {
-      switch (key) {
-        case 'save':
-          this.handleSave()
-          break
-        case 'cancel':
-          this.closeDialog()
-          break
-        default:
-          break
-      }
-    },
-    // 保存数据
-    handleSave() {
-      this.$refs[this.formName].validate(valid => {
-        if (valid) {
-          this.saveData()
-        } else {
-          ActionUtils.saveErrorMessage()
+    data () {
+        return {
+            formName: 'settingTypeForm',
+            formLabelWidth: '120px',
+            dialogVisible: this.visible,
+            dialogLoading: false,
+            formModel: {
+                typeId: ''
+            },
+            rules: {},
+            toolbars: [
+                { key: 'save' },
+                { key: 'cancel' }
+            ]
         }
-      })
     },
-    // 提交保存数据
-    saveData() {
-      this.$emit('save', this.formModel.typeId)
+    computed: {
+        formId () {
+            return this.id
+        }
     },
-    // 关闭当前窗口
-    closeDialog() {
-      this.$emit('close', false)
-      this.$refs[this.formName].resetFields()
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+                if (this.visible) this.formModel.typeId = []
+            },
+            immediate: true
+        }
     },
-    handleSelectOptions(params) {
-      if (this.$refs['ibpsTypeSelect']) {
-        this.$refs['ibpsTypeSelect'].loadTreeData(params)
-      }
+    methods: {
+        handleActionEvent ({ key }) {
+            switch (key) {
+                case 'save':
+                    this.handleSave()
+                    break
+                case 'cancel':
+                    this.closeDialog()
+                    break
+                default:
+                    break
+            }
+        },
+        // 保存数据
+        handleSave () {
+            this.$refs[this.formName].validate(valid => {
+                if (valid) {
+                    this.saveData()
+                } else {
+                    ActionUtils.saveErrorMessage()
+                }
+            })
+        },
+        // 提交保存数据
+        saveData () {
+            this.$emit('save', this.formModel.typeId)
+        },
+        // 关闭当前窗口
+        closeDialog () {
+            this.$emit('close', false)
+            this.$refs[this.formName].resetFields()
+        },
+        handleSelectOptions (params) {
+            if (this.$refs['ibpsTypeSelect']) {
+                this.$refs['ibpsTypeSelect'].loadTreeData(params)
+            }
+        }
     }
-  }
 }
 </script>

+ 346 - 339
src/business/platform/data/templatebuilder/right-aside/propertys/index.vue

@@ -1,178 +1,185 @@
 <template>
-  <div class="template-property">
-    <el-form
-      ref="dataTemplate"
-      :model="dataTemplate"
-      :rules="rules"
-      size="mini"
-      label-width="80px"
-      @submit.native.prevent
-    >
-      <div class="panel panel-default">
-        <div class="panel-heading">模版属性</div>
-        <div class="panel-body">
-          <el-form-item label="模版标题" prop="name">
-            <el-input
-              v-model="dataTemplate.name"
-              v-pinyin="{vm:dataTemplate}"
-              placeholder="模版标题"
-              :maxlength="64"
-              @input="(val)=>handleInput('name',val)"
-            />
-          </el-form-item>
-          <el-form-item label="模版key" prop="key">
-            <el-input
-              v-model="dataTemplate.key"
-              placeholder="模版key"
-              :maxlength="64"
-              @input="(val)=>handleInput('key',val)"
-            />
-          </el-form-item>
-          <el-form-item label="模版分类" prop="typeId">
-            <ibps-type-select
-              v-model="dataTemplate.typeId"
-              category-key="BO_TYPE"
-              clearable
-              @input="(val)=>handleInput('typeId',val)"
-            />
-          </el-form-item>
-          <el-form-item label="模版类型" prop="type">
-            <el-select
-              v-if="dataTemplate.composeType!=='treeForm'"
-              v-model="dataTemplate.type"
-              style="width:100%;"
-              @change="(val)=>handleInput('type',val)"
-            >
-              <el-option
-                v-for="option in templateTypeOptions"
-                :key="option.value"
-                :value="option.value"
-                :label="option.label"
-              />
-            </el-select>
-            <el-select
-              v-else
-              v-model="dataTemplate.type"
-              style="width:100%;"
-              @change="(val)=>handleInput('type',val)"
-            >
-              <el-option
-                v-for="option in options"
-                :key="option.value"
-                :value="option.value"
-                :label="option.label"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item v-if="dataTemplate.type !== 'valueSource'" label="展示形式" prop="showType">
-            <el-select
-              v-model="dataTemplate.showType"
-              style="width:100%;"
-              @change="(val)=>handleInput('showType',val)"
-            >
-              <el-option
-                v-for="option in showTypeOptions"
-                :key="option.value"
-                :value="option.value"
-                :label="option.label"
-              />
-            </el-select>
-          </el-form-item>
+    <div class="template-property">
+        <el-form
+            ref="dataTemplate"
+            :model="dataTemplate"
+            :rules="rules"
+            size="mini"
+            label-width="80px"
+            @submit.native.prevent
+        >
+            <div class="panel panel-default">
+                <div class="panel-heading">模版属性</div>
+                <div class="panel-body">
+                    <el-form-item label="模版标题" prop="name">
+                        <el-input
+                            v-model="dataTemplate.name"
+                            v-pinyin="{vm:dataTemplate}"
+                            placeholder="模版标题"
+                            :maxlength="64"
+                            @input="(val)=>handleInput('name',val)"
+                        />
+                    </el-form-item>
+                    <el-form-item label="模版key" prop="key">
+                        <el-input
+                            v-model="dataTemplate.key"
+                            placeholder="模版key"
+                            :maxlength="64"
+                            @input="(val)=>handleInput('key',val)"
+                        />
+                    </el-form-item>
+                    <el-form-item label="模版分类" prop="typeId">
+                        <ibps-type-select
+                            v-model="dataTemplate.typeId"
+                            category-key="BO_TYPE"
+                            clearable
+                            filterable
+                            filter-label="name"
+                            @input="(val)=>handleInput('typeId',val)"
+                        />
+                    </el-form-item>
+                    <el-form-item label="模版类型" prop="type">
+                        <el-select
+                            v-if="dataTemplate.composeType!=='treeForm'"
+                            v-model="dataTemplate.type"
+                            style="width:100%;"
+                            @change="(val)=>handleInput('type',val)"
+                        >
+                            <el-option
+                                v-for="option in templateTypeOptions"
+                                :key="option.value"
+                                :value="option.value"
+                                :label="option.label"
+                            />
+                        </el-select>
+                        <el-select
+                            v-else
+                            v-model="dataTemplate.type"
+                            style="width:100%;"
+                            @change="(val)=>handleInput('type',val)"
+                        >
+                            <el-option
+                                v-for="option in options"
+                                :key="option.value"
+                                :value="option.value"
+                                :label="option.label"
+                            />
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item v-if="dataTemplate.type !== 'valueSource'" label="展示形式" prop="showType">
+                        <el-select
+                            v-model="dataTemplate.showType"
+                            style="width:100%;"
+                            @change="(val)=>handleInput('showType',val)"
+                        >
+                            <el-option
+                                v-for="option in showTypeOptions"
+                                :key="option.value"
+                                :value="option.value"
+                                :label="option.label"
+                            />
+                        </el-select>
+                    </el-form-item>
 
-          <el-form-item v-if="dataTemplate.type !== 'valueSource' && dataTemplate.showType === 'compose'" label="组合形式:" prop="composeType">
-            <el-select
-              v-model="dataTemplate.composeType"
-              style="width:100%;"
-              @change="(val)=>handleInput('composeType',val)"
-            >
-              <el-option
-                v-for="option in composeTypeOptions"
-                :key="option.value"
-                :value="option.value"
-                :label="option.label"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="数据集" prop="datasetKey">
-            <dataset-selector
-              v-model="dataTemplate.datasetKey"
-              value-key="key"
-              @change="changeDataset"
-            />
-          </el-form-item>
-          <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="唯一字段" prop="unique">
-            <el-select
-              v-if="datasetType!=='thirdparty'"
-              v-model="dataTemplate.unique"
-              style="width:100%;"
-              @change="(val)=>handleInput('unique',val)"
-            >
-              <el-option
-                v-for="field in fields"
-                :key="field.name"
-                :value="field.name"
-                :label="field.label"
-              />
-            </el-select>
-            <el-input v-else v-model="dataTemplate.unique" @input="(val)=>handleInput('typeId',val)" />
-          </el-form-item>
-        </div>
-      </div>
-      <!--接口配置 -->
-      <!-- <div v-if="datasetType=='thirdparty'" class="panel panel-default">
-        <div class="panel-heading">第三方接口数据配置</div>
-        <div class="panel-body">
-          <el-button style="width:100%;" type="primary" icon="ibps-icon-file-code-o" @click="thirdpartyConfigDialogVisible=true">第三方接口数据配置</el-button>
-        </div>
-      </div> -->
-      <!-- 扩展属性-->
-      <div v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" class="panel panel-default">
-        <div class="panel-heading">扩展属性</div>
-        <div class="panel-body">
-          <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="绑定表单" prop="form">
-            <form-def-selector
-              v-model="formKey"
-              :data-template-key="dataTemplate.key"
-              :rights-type="rightsType"
-              type="dataTemplate"
-              :is-save="isSave"
-              :value-key="'key'"
-              :toolbar="formToolbar"
-            />
-          </el-form-item>
-          <el-form-item label="打印模版" prop="formPrint">
-            <form-print-selector
-              v-model="dataTemplate.attrs.print_id"
-              :form-key="formKey"
-              @input="(val)=>handleAttrs('print_id',val)"
-            />
-          </el-form-item>
-        </div>
-      </div>
-      <div class="panel panel-default">
-        <div class="panel-heading">模版脚本</div>
-        <div class="panel-body">
-          <el-button style="width:100%;" type="primary" icon="ibps-icon-file-code-o" @click="editTemplateScript('pc')">模版脚本</el-button>
-          <!-- <el-button style="width:100%;margin:16px 0 0 0;" type="primary" icon="ibps-icon-file-code-o" @click="editTemplateScript('mobile')">移动端模版脚本</el-button> -->
-          <template-script
-            :visible="dialogScriptVisible"
-            :title="scriptTitle"
-            :data="script"
-            :show-type="dataTemplate.showType"
-            @callback="handleDialogScript"
-            @close="visible => dialogScriptVisible = visible"
-          />
-        </div>
-      </div>
-    </el-form>
-    <thirdparty-config
-      :visible="thirdpartyConfigDialogVisible"
-      :datasets="data.datasets"
-      :data="dataTemplate.attrs.config"
-      @callback="handleThirdpartyConfigSettingField"
-      @close="visible => settingFieldDialogVisible = visible"
-    />
-  </div>
+                    <el-form-item v-if="dataTemplate.type !== 'valueSource' && dataTemplate.showType === 'compose'" label="组合形式:" prop="composeType">
+                        <el-select
+                            v-model="dataTemplate.composeType"
+                            style="width:100%;"
+                            @change="(val)=>handleInput('composeType',val)"
+                        >
+                            <el-option
+                                v-for="option in composeTypeOptions"
+                                :key="option.value"
+                                :value="option.value"
+                                :label="option.label"
+                            />
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="数据集" prop="datasetKey">
+                        <dataset-selector
+                            v-model="dataTemplate.datasetKey"
+                            value-key="key"
+                            @change="changeDataset"
+                        />
+                    </el-form-item>
+                    <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="唯一字段" prop="unique">
+                        <el-select
+                            v-if="datasetType!=='thirdparty'"
+                            v-model="dataTemplate.unique"
+                            style="width:100%;"
+                            @change="(val)=>handleInput('unique',val)"
+                        >
+                            <el-option
+                                v-for="field in fields"
+                                :key="field.name"
+                                :value="field.name"
+                                :label="field.label"
+                            />
+                        </el-select>
+                        <el-input v-else v-model="dataTemplate.unique" @input="(val)=>handleInput('typeId',val)" />
+                    </el-form-item>
+                </div>
+            </div>
+            <!--接口配置 -->
+            <!-- <div v-if="datasetType=='thirdparty'" class="panel panel-default">
+                <div class="panel-heading">第三方接口数据配置</div>
+                <div class="panel-body">
+                    <el-button
+                        style="width:100%;"
+                        type="primary"
+                        icon="ibps-icon-file-code-o"
+                        @click="thirdpartyConfigDialogVisible=true"
+                    >第三方接口数据配置</el-button>
+                </div>
+            </div> -->
+            <!-- 扩展属性-->
+            <div v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" class="panel panel-default">
+                <div class="panel-heading">扩展属性</div>
+                <div class="panel-body">
+                    <el-form-item v-if="(dataTemplate.showType === 'compose'&&dataTemplate.composeType === 'treeForm')||dataTemplate.showType!== 'compose'" label="绑定表单" prop="form">
+                        <form-def-selector
+                            v-model="formKey"
+                            :data-template-key="dataTemplate.key"
+                            :rights-type="rightsType"
+                            type="dataTemplate"
+                            :is-save="isSave"
+                            :value-key="'key'"
+                            :toolbar="formToolbar"
+                        />
+                    </el-form-item>
+                    <el-form-item label="打印模版" prop="formPrint">
+                        <form-print-selector
+                            v-model="dataTemplate.attrs.print_id"
+                            :form-key="formKey"
+                            @input="(val)=>handleAttrs('print_id',val)"
+                        />
+                    </el-form-item>
+                </div>
+            </div>
+            <div class="panel panel-default">
+                <div class="panel-heading">模版脚本</div>
+                <div class="panel-body">
+                    <el-button style="width:100%;" type="primary" icon="ibps-icon-file-code-o" @click="editTemplateScript('pc')">模版脚本</el-button>
+                    <!-- <el-button style="width:100%;margin:16px 0 0 0;" type="primary" icon="ibps-icon-file-code-o" @click="editTemplateScript('mobile')">移动端模版脚本</el-button> -->
+                    <template-script
+                        :visible="dialogScriptVisible"
+                        :title="scriptTitle"
+                        :data="script"
+                        :show-type="dataTemplate.showType"
+                        @callback="handleDialogScript"
+                        @close="visible => dialogScriptVisible = visible"
+                    />
+                </div>
+            </div>
+        </el-form>
+        <thirdparty-config
+            :visible="thirdpartyConfigDialogVisible"
+            :datasets="data.datasets"
+            :data="dataTemplate.attrs.config"
+            @callback="handleThirdpartyConfigSettingField"
+            @close="visible => settingFieldDialogVisible = visible"
+        />
+    </div>
 </template>
 <script>
 import { mapState } from 'vuex'
@@ -190,181 +197,181 @@ import { mapActions } from 'vuex'
  * 表单属性
  */
 export default {
-  components: {
-    IbpsTypeSelect,
-    DatasetSelector,
-    FormDefSelector,
-    FormPrintSelector,
-    TemplateScript,
-    ThirdpartyConfig
-  },
-  props: {
-    data: {
-      type: Object,
-      required: true
+    components: {
+        IbpsTypeSelect,
+        DatasetSelector,
+        FormDefSelector,
+        FormPrintSelector,
+        TemplateScript,
+        ThirdpartyConfig
     },
-    datasetType: {
-      type: String,
-      default: 'table'
-    },
-    isSave: {
-      type: Boolean,
-      default: false
-    },
-    rightsType: {
-      type: String,
-      default: 'data'
-    }
-  },
-  data() {
-    return {
-      dialogScriptVisible: false,
-      thirdpartyConfigDialogVisible: false,
-      options: [{
-        value: 'default',
-        label: '默认'
-      }],
-      templateTypeOptions: templateTypeOptions,
-      showTypeOptions: showTypeOptions,
-      composeTypeOptions: composeTypeOptions,
-      formToolbar: [{
-        key: 'rechoose',
-        type: 'primary',
-        label: '重选'
-      }, {
-        key: 'remove',
-        type: 'danger',
-        label: '删除'
-      }, {
-        key: 'rights',
-        type: 'success',
-        label: '权限'
-      }],
-      rules: {
-        name: [{ required: true, message: this.$t('validate.required') }],
-        key: [{ required: true, message: this.$t('validate.required') }]
-      },
-      script: '',
-      scriptTitle: '模板脚本设置',
-      scriptType: 'pc',
-      fields: [],
-      formKey: ''
-    }
-  },
-  computed: {
-    ...mapState({
-      datasets: state => state.ibps.dataTemplate.datasets
-    }),
-    // fields() {
-    //   return Utils.getFields(this.datasets, 'unique')
-    // },
-    dataTemplate: {
-      get() {
-        return this.data || {}
-      },
-      set(val) {
-        this.$emit('update', val)
-      }
-    }
-  },
-  watch: {
-    datasets: {
-      handler: function(val, oldVal) {
-        this.$utils.isNotEmpty(val) ? this.fields = Utils.getFields(val, 'unique') : null
-      },
-      deep: true,
-      immediate: true
-    },
-    dataTemplate: {
-      handler(val, oldVal) {
-        if (val !== oldVal) {
-          const attrs = val.attrs
-          if (this.$utils.isNotEmpty(attrs) && this.$utils.isNotEmpty(attrs.form_key)) {
-            this.$nextTick(() => {
-              const curFormKey = attrs.form_key || ''
-              if (this.formKey !== curFormKey) {
-                this.formKey = curFormKey
-              }
-            })
-          }
+    props: {
+        data: {
+            type: Object,
+            required: true
+        },
+        datasetType: {
+            type: String,
+            default: 'table'
+        },
+        isSave: {
+            type: Boolean,
+            default: false
+        },
+        rightsType: {
+            type: String,
+            default: 'data'
         }
-      },
-      deep: true,
-      immediate: true
     },
-    formKey: {
-      handler(val, oldVal) {
-        if (val !== oldVal) {
-          this.handleAttrs('form_key', val)
+    data () {
+        return {
+            dialogScriptVisible: false,
+            thirdpartyConfigDialogVisible: false,
+            options: [{
+                value: 'default',
+                label: '默认'
+            }],
+            templateTypeOptions: templateTypeOptions,
+            showTypeOptions: showTypeOptions,
+            composeTypeOptions: composeTypeOptions,
+            formToolbar: [{
+                key: 'rechoose',
+                type: 'primary',
+                label: '重选'
+            }, {
+                key: 'remove',
+                type: 'danger',
+                label: '删除'
+            }, {
+                key: 'rights',
+                type: 'success',
+                label: '权限'
+            }],
+            rules: {
+                name: [{ required: true, message: this.$t('validate.required') }],
+                key: [{ required: true, message: this.$t('validate.required') }]
+            },
+            script: '',
+            scriptTitle: '模板脚本设置',
+            scriptType: 'pc',
+            fields: [],
+            formKey: ''
         }
-      }
-    }
-  },
-  methods: {
-    ...mapActions({
-      setDatasets: 'ibps/dataTemplate/setDatasets'
-    }),
-    changeDataset(data) {
-      this.dataTemplate.datasetType = data.type
-      this.setDatasets([])
-      if (this.$utils.isEmpty(this.datasets) && this.$utils.isNotEmpty(data)) {
-        this.getUniqueOption(data.key)
-      }
-      if (this.$utils.isEmpty(data)) {
-        this.fields = []
-        this.dataTemplate.unique = ''
-      }
-    },
-    getUniqueOption(key) {
-      buildTree({
-        datasetKey: key
-      }).then(res => {
-        this.setDatasets(res.data)
-        const data = res.data
-        this.fields = data
-      }).catch(err => {
-        console.error(err)
-      })
     },
-    handleInput(key, val) {
-      this.dataTemplate[key] = val
-      this.$emit('update', JSON.parse(JSON.stringify(this.dataTemplate)))
+    computed: {
+        ...mapState({
+            datasets: state => state.ibps.dataTemplate.datasets
+        }),
+        // fields() {
+        //   return Utils.getFields(this.datasets, 'unique')
+        // },
+        dataTemplate: {
+            get () {
+                return this.data || {}
+            },
+            set (val) {
+                this.$emit('update', val)
+            }
+        }
     },
-    handleAttrs(key, val) {
-      if (this.$utils.isEmpty(this.dataTemplate.attrs)) {
-        this.dataTemplate.attrs = {}
-      }
-      this.dataTemplate.attrs[key] = val
-      this.$emit('update', JSON.parse(JSON.stringify(this.dataTemplate)))
+    watch: {
+        datasets: {
+            handler: function (val, oldVal) {
+                this.$utils.isNotEmpty(val) ? this.fields = Utils.getFields(val, 'unique') : null
+            },
+            deep: true,
+            immediate: true
+        },
+        dataTemplate: {
+            handler (val, oldVal) {
+                if (val !== oldVal) {
+                    const attrs = val.attrs
+                    if (this.$utils.isNotEmpty(attrs) && this.$utils.isNotEmpty(attrs.form_key)) {
+                        this.$nextTick(() => {
+                            const curFormKey = attrs.form_key || ''
+                            if (this.formKey !== curFormKey) {
+                                this.formKey = curFormKey
+                            }
+                        })
+                    }
+                }
+            },
+            deep: true,
+            immediate: true
+        },
+        formKey: {
+            handler (val, oldVal) {
+                if (val !== oldVal) {
+                    this.handleAttrs('form_key', val)
+                }
+            }
+        }
     },
-    editTemplateScript(type) {
-      this.scriptType = type
-      if (type === 'pc') {
-        this.scriptTitle = '模板脚本设置'
-        this.script = this.dataTemplate.attrs.script
-      } else if (type === 'mobile') {
-        this.scriptTitle = '移动端模板脚本设置'
-        this.script = this.dataTemplate.attrs.script
-      }
+    methods: {
+        ...mapActions({
+            setDatasets: 'ibps/dataTemplate/setDatasets'
+        }),
+        changeDataset (data) {
+            this.dataTemplate.datasetType = data.type
+            this.setDatasets([])
+            if (this.$utils.isEmpty(this.datasets) && this.$utils.isNotEmpty(data)) {
+                this.getUniqueOption(data.key)
+            }
+            if (this.$utils.isEmpty(data)) {
+                this.fields = []
+                this.dataTemplate.unique = ''
+            }
+        },
+        getUniqueOption (key) {
+            buildTree({
+                datasetKey: key
+            }).then(res => {
+                this.setDatasets(res.data)
+                const data = res.data
+                this.fields = data
+            }).catch(err => {
+                console.error(err)
+            })
+        },
+        handleInput (key, val) {
+            this.dataTemplate[key] = val
+            this.$emit('update', JSON.parse(JSON.stringify(this.dataTemplate)))
+        },
+        handleAttrs (key, val) {
+            if (this.$utils.isEmpty(this.dataTemplate.attrs)) {
+                this.dataTemplate.attrs = {}
+            }
+            this.dataTemplate.attrs[key] = val
+            this.$emit('update', JSON.parse(JSON.stringify(this.dataTemplate)))
+        },
+        editTemplateScript (type) {
+            this.scriptType = type
+            if (type === 'pc') {
+                this.scriptTitle = '模板脚本设置'
+                this.script = this.dataTemplate.attrs.script
+            } else if (type === 'mobile') {
+                this.scriptTitle = '移动端模板脚本设置'
+                this.script = this.dataTemplate.attrs.script
+            }
 
-      this.dialogScriptVisible = true
-    },
-    handleDialogScript(script) {
-      // script 为codemirror中填入的脚本值
-      if (this.scriptType === 'pc') {
-        this.handleAttrs('script', script)
-      } else {
-        this.handleAttrs('mobile_script', script)
-      }
-    },
-    validate(callback) {
-      this.$nextTick(() => {
-        this.$refs.dataTemplate.validate(callback)
-      })
-    },
-    handleThirdpartyConfigSettingField(data) {
+            this.dialogScriptVisible = true
+        },
+        handleDialogScript (script) {
+            // script 为codemirror中填入的脚本值
+            if (this.scriptType === 'pc') {
+                this.handleAttrs('script', script)
+            } else {
+                this.handleAttrs('mobile_script', script)
+            }
+        },
+        validate (callback) {
+            this.$nextTick(() => {
+                this.$refs.dataTemplate.validate(callback)
+            })
+        },
+        handleThirdpartyConfigSettingField (data) {
 
+        }
     }
-  }
 }
 </script>

+ 12 - 11
src/business/platform/data/templaterender/form/action.js

@@ -26,6 +26,7 @@ export default {
                         this.handleSave()
                         break
                     }
+                    break
                 default:
                     break
             }
@@ -53,7 +54,7 @@ export default {
                                 type: 'warning'
                             }).then(() => {
                                 this.handleStartFlowFromEdit(flowKey)
-                            }).catch(() => {})
+                            }).catch(() => { })
                         } else {
                             this.bpmDefDialogVisible = true
                         }
@@ -128,18 +129,18 @@ export default {
                 text: this.$t('common.saving')
             })
             saveFormData(jsonData).then(response => {
-                loading.close()
-                this.$alert(`保存表单成功!`, {
-                    showClose: false
-                }).then(() => {
-                    // 后置事件
-                    this.afterScript(this.actionName, {
-                        data: response.data,
-                        variables: response.variables
-                    }, () => {
+                // 后置事件  调整触发时机,表单数据保存后,弹框前
+                this.afterScript(this.actionName, {
+                    data: response.data,
+                    variables: response.variables
+                }, () => {
+                    loading.close()
+                    this.$alert(`保存表单成功!`, {
+                        showClose: false
+                    }).then(() => {
                         this.callbackPage()
+                    }).catch(() => {
                     })
-                }).catch(() => {
                 })
             }).catch(() => {
                 loading.close()

+ 31 - 18
src/business/platform/data/templaterender/templates/list.vue

@@ -1025,6 +1025,7 @@ export default {
                 let src = ''
                 this.readonly = false
                 const { userId } = this.$store.getters || {}
+                const [path, ...rest] = button.reportPath?.split('&') || []
                 switch (buttonType) {
                     case 'search': // 查询
                         ActionUtils.setFirstPagination(this.pagination)
@@ -1092,7 +1093,7 @@ export default {
                             if (!button.reportPath) {
                                 return this.$message.warning('请先配置对应报表路径!')
                             }
-                            src = this.$reportPath.replace('show', 'pdf') + button.reportPath.split('&')[0] + `&` + this.getReportParams(button.reportPath, selection, data)
+                            src = this.$reportPath.replace('show', 'pdf') + path + this.getReportParams(rest, selection, data)
                             this.$common.preview(this, src)
                         }
                         break
@@ -1101,7 +1102,7 @@ export default {
                             return this.$message.warning('请先配置对应报表路径!')
                         }
                         this.$common.snapshoot({
-                            url: this.$getReportFile(button.reportPath.split('&')[0], this.getReportParams(button.reportPath, selection, data)),
+                            url: this.$getReportFile(path, this.getReportParams(rest, selection, data)),
                             name: selection,
                             type: 'pdf'
                         }).then((res) => {
@@ -2056,23 +2057,35 @@ export default {
             // conso
             this.handleAction(buttonTypeAct, buttonAct.position, selectAct, dataAct, indexAct, buttonAct)
         },
-        getReportParams (path, selection, data) {
-            /**
-             * 1、原报表路径:安全管理/紫外灯辐照度值测定记录表.rpx
-             * 2、补充报表路径:安全管理/紫外灯辐照度值测定记录表.rpx&id_=id_
-             * 2-1、最后那么id_表示在列上的字段属性,增加报表传参的便捷性;
-             * 2-2、有些列表需要展示的是子表的数据,但是报表需要展示的是主表数据,列表唯一字段只能是子表id_,所以主表的id_就不能也叫id_;
-             * 2-3、受限于报表快照生成的参数获取,当前只补充关于id_的逻辑;
-             */
-            const str = `org_=${this.first}&second_=${this.second}&id_=`
-            const arr = path.split('&')
-            if (arr.length === 2) {
-                const fieldArr = arr[1].split('=')
-                return str + `${data[fieldArr[1]]}`
-            } else {
-                // 如果是没有传参,还是原报表路径
-                return str + `${selection}`
+        getReportParams (args, selection, data) {
+            const defaultParams = {
+                org_: this.first,
+                second_: this.second,
+                id_: selection
+            }
+            // 无额外参数时直接返回默认参数字符串
+            if (!args || !args.length) {
+                return this.serializeParams(defaultParams)
             }
+
+            // 解析额外参数,覆盖默认参数
+            const finalParams = args.reduce((acc, item) => {
+                const [key, field] = item.split('=') || []
+                // 无效参数跳过
+                if (!key || !field) return acc
+
+                // 若data中获取不到字段值,可能传参为值并非字段
+                const value = data[field] || field
+                if (this.$utils.isNotEmpty(value)) {
+                    // 同名参数覆盖
+                    acc[key] = value
+                }
+                return acc
+            }, { ...defaultParams })
+            return this.serializeParams(finalParams)
+        },
+        serializeParams (params) {
+            return '&' + Object.entries(params).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&')
         }
     }
 }

+ 417 - 412
src/business/platform/form/formbuilder/right-aside/propertys/index.vue

@@ -1,266 +1,271 @@
 <template>
-  <div class="form-property">
-    <el-form
-      ref="formDef"
-      :model="formDef"
-      :rules="rules"
-      size="mini"
-      label-width="80px"
-      @submit.native.prevent
-    >
-      <div class="panel panel-default">
-        <div class="panel-heading">表单属性</div>
-        <div class="panel-body">
-          <el-form-item label="表单标题" prop="name">
-            <el-input
-              v-model="formDef.name"
-              v-pinyin="{vm:formDef}"
-              placeholder="请输入表单标题"
-              :maxlength="64"
-            />
-          </el-form-item>
-          <el-form-item label="表单key" prop="key">
-            <el-input v-model="formDef.key" placeholder="请输入表单key" :disabled="$utils.isNotEmpty(id)" :maxlength="64" />
-          </el-form-item>
-          <el-form-item label="表单分类">
-            <ibps-type-select
-              v-model="formDef.typeId"
-              category-key="BO_TYPE"
-              placeholder="请选择表单分类"
-              clearable
-            />
-          </el-form-item>
-          <el-form-item label="表单描述">
-            <el-input
-              v-model="formDef.desc"
-              type="textarea"
-              placeholder="请输入表单描述"
-              :maxlength="512"
-            />
-          </el-form-item>
-        </div>
-      </div>
+    <div class="form-property">
+        <el-form
+            ref="formDef"
+            :model="formDef"
+            :rules="rules"
+            size="mini"
+            label-width="80px"
+            @submit.native.prevent
+        >
+            <div class="panel panel-default">
+                <div class="panel-heading">表单属性</div>
+                <div class="panel-body">
+                    <el-form-item label="表单名称" prop="name">
+                        <el-input
+                            v-model="formDef.name"
+                            v-pinyin="{vm:formDef}"
+                            placeholder="请输入表单名称"
+                            :maxlength="64"
+                        />
+                    </el-form-item>
+                    <el-form-item label="表单标题">
+                        <el-input v-model="formDef.attrs.title_field" placeholder="请输入表单标题" :maxlength="64" />
+                    </el-form-item>
+                    <el-form-item label="表单key" prop="key">
+                        <el-input v-model="formDef.key" placeholder="请输入表单key" :disabled="$utils.isNotEmpty(id)" :maxlength="64" />
+                    </el-form-item>
+                    <el-form-item label="表单分类">
+                        <ibps-type-select
+                            v-model="formDef.typeId"
+                            category-key="BO_TYPE"
+                            placeholder="请选择表单分类"
+                            clearable
+                            filterable
+                            filter-label="name"
+                        />
+                    </el-form-item>
+                    <el-form-item label="表单描述">
+                        <el-input
+                            v-model="formDef.desc"
+                            type="textarea"
+                            placeholder="请输入表单描述"
+                            :maxlength="512"
+                        />
+                    </el-form-item>
+                </div>
+            </div>
 
-      <div class="panel panel-default">
-        <div class="panel-heading">表单提交校验<help-tip prop="formVerify" /></div>
-        <div class="panel-body">
-          <el-table
-            v-if="formVerifyList && formVerifyList.length >0"
-            :data="formVerifyList"
-            :show-header="false"
-            size="small"
-            style=" border: 1px solid #ebeef5;"
-          >
-            <el-table-column prop="show" />
-            <el-table-column
-              width="80"
-            >
-              <template slot-scope="{ $index}">
-                <el-button type="text" icon="ibps-icon-remove" size="small" @click="removeFormVerify($index)" />
-                <el-button type="text" icon="ibps-icon-edit" size="small" @click="editFormVerify($index)" />
-              </template>
-            </el-table-column>
-          </el-table>
-          <div style="padding-top: 5px;">
-            <el-button style="width:100%;" type="primary" icon="ibps-icon-plus-square" @click="editFormVerify()">添加校验条件</el-button>
-          </div>
-        </div>
-      </div>
-      <!-- <div class="panel panel-default">
-        <div class="panel-heading">表单规则<help-tip prop="formRule" /></div>
-        <div class="panel-body">
-          <el-button style="width:100%;" type="primary" @click="editFormRule()">设置表单规则</el-button>
-        </div>
-      </div> -->
-      <div class="panel panel-default">
-        <div class="panel-heading">表单脚本<help-tip prop="formScript" /></div>
-        <div class="panel-body">
-          <el-button style="width:100%;" type="primary" icon="ibps-icon-file-code-o" @click="editFormScript()">表单脚本</el-button>
-          <p>&nbsp;</p>
-          <el-button style="width:100%;" icon="ibps-icon-file-code-o" @click="editFormScript('mobile')">移动端表单脚本</el-button>
+            <div class="panel panel-default">
+                <div class="panel-heading">表单提交校验<help-tip prop="formVerify" /></div>
+                <div class="panel-body">
+                    <el-table
+                        v-if="formVerifyList && formVerifyList.length >0"
+                        :data="formVerifyList"
+                        :show-header="false"
+                        size="small"
+                        style=" border: 1px solid #ebeef5;"
+                    >
+                        <el-table-column prop="show" />
+                        <el-table-column
+                            width="80"
+                        >
+                            <template slot-scope="{ $index}">
+                                <el-button type="text" icon="ibps-icon-remove" size="small" @click="removeFormVerify($index)" />
+                                <el-button type="text" icon="ibps-icon-edit" size="small" @click="editFormVerify($index)" />
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div style="padding-top: 5px;">
+                        <el-button style="width:100%;" type="primary" icon="ibps-icon-plus-square" @click="editFormVerify()">添加校验条件</el-button>
+                    </div>
+                </div>
+            </div>
+            <!-- <div class="panel panel-default">
+                <div class="panel-heading">表单规则<help-tip prop="formRule" /></div>
+                <div class="panel-body">
+                    <el-button style="width:100%;" type="primary" @click="editFormRule()">设置表单规则</el-button>
+                </div>
+            </div> -->
+            <div class="panel panel-default">
+                <div class="panel-heading">表单脚本<help-tip prop="formScript" /></div>
+                <div class="panel-body">
+                    <el-button style="width:100%;" type="primary" icon="ibps-icon-file-code-o" @click="editFormScript()">表单脚本</el-button>
+                    <p>&nbsp;</p>
+                    <el-button style="width:100%;" icon="ibps-icon-file-code-o" @click="editFormScript('mobile')">移动端表单脚本</el-button>
 
-        </div>
-      </div>
+                </div>
+            </div>
 
-      <div class="panel panel-default">
-        <div class="panel-heading">表单配置</div>
-        <div class="panel-body">
-          <el-form-item label="标签宽度">
-            <el-row>
-              <el-col :span="12">
-                <el-input-number
-                  v-model="formDef.attrs.labelWidth"
-                  :min="formDef.attrs.labelWidthUnit==='px'?50:10"
-                  :max="formDef.attrs.labelWidthUnit==='px'?500:100"
-                  :step="1"
-                  style="width: 100%;"
-                />
-              </el-col>
-              <el-col :span="11">
-                <el-select v-model="formDef.attrs.labelWidthUnit" style="width: 100%;" @change="changeLabelWidthUnit">
-                  <el-option label="像素(px)" value="px" />
-                  <el-option label="百分比(%)" value="%" />
-                </el-select>
-              </el-col>
-            </el-row>
-          </el-form-item>
-          <el-form-item label="标签对齐">
-            <el-radio-group v-model="formDef.attrs.labelPosition">
-              <el-radio-button label="left">左对齐</el-radio-button>
-              <el-radio-button label="top">顶部对齐</el-radio-button>
-              <el-radio-button label="right">右对齐</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
+            <div class="panel panel-default">
+                <div class="panel-heading">表单配置</div>
+                <div class="panel-body">
+                    <el-form-item label="标签宽度">
+                        <el-row>
+                            <el-col :span="12">
+                                <el-input-number
+                                    v-model="formDef.attrs.labelWidth"
+                                    :min="formDef.attrs.labelWidthUnit==='px'?50:10"
+                                    :max="formDef.attrs.labelWidthUnit==='px'?500:100"
+                                    :step="1"
+                                    style="width: 100%;"
+                                />
+                            </el-col>
+                            <el-col :span="11">
+                                <el-select v-model="formDef.attrs.labelWidthUnit" style="width: 100%;" @change="changeLabelWidthUnit">
+                                    <el-option label="像素(px)" value="px" />
+                                    <el-option label="百分比(%)" value="%" />
+                                </el-select>
+                            </el-col>
+                        </el-row>
+                    </el-form-item>
+                    <el-form-item label="标签对齐">
+                        <el-radio-group v-model="formDef.attrs.labelPosition">
+                            <el-radio-button label="left">左对齐</el-radio-button>
+                            <el-radio-button label="top">顶部对齐</el-radio-button>
+                            <el-radio-button label="right">右对齐</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
 
-          <el-form-item label="尺寸">
-            <el-select v-model="formDef.attrs.size" style="width:100%;">
-              <el-option label="默认" value="" />
-              <el-option label="中" value="medium" />
-              <el-option label="小" value="small" />
-              <el-option label="迷你" value="mini" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="验证图标">
-            <el-switch v-model="formDef.attrs.statusIcon" />
-          </el-form-item>
-          <el-form-item label="自定义Class" label-width="110px">
-            <el-input v-model="formDef.attrs.customClass" />
-          </el-form-item>
-          <el-form-item label-width="145px">
-            <template slot="label">标签的后缀<help-tip prop="formSuffix" /></template>
-            <el-switch v-model="formDef.attrs.colon" @change="changeColon" />
-            <el-input
-              v-if="formDef.attrs.colon"
-              v-model="labelSuf"
-              placeholder="标签文本的后缀"
-            />
-          </el-form-item>
-          <el-form-item label-width="145px">
-            <template slot="label">隐藏必填的星号<help-tip prop="formAsterisk" /></template>
-            <el-switch v-model="formDef.attrs.hideRequiredAsterisk" />
-          </el-form-item>
-          <el-form-item label-width="145px" label="">
-            <template slot="label">标签描述位置<help-tip prop="descPosition" /></template>
-            <el-radio-group v-model="formDef.attrs.descPosition">
-              <el-radio-button label="lableIcon">标签图标</el-radio-button>
-              <el-radio-button label="inline">底部一行</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="文本只读显示样式" label-width="125px">
-            <el-select v-model="formDef.attrs.read_style" style="width:100%;">
-              <el-option label="文本展示" value="text" />
-              <el-option label="原样展示" value="original" />
-            </el-select>
-          </el-form-item>
+                    <el-form-item label="尺寸">
+                        <el-select v-model="formDef.attrs.size" style="width:100%;">
+                            <el-option label="默认" value="" />
+                            <el-option label="中" value="medium" />
+                            <el-option label="小" value="small" />
+                            <el-option label="迷你" value="mini" />
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="验证图标">
+                        <el-switch v-model="formDef.attrs.statusIcon" />
+                    </el-form-item>
+                    <el-form-item label="自定义Class" label-width="110px">
+                        <el-input v-model="formDef.attrs.customClass" />
+                    </el-form-item>
+                    <el-form-item label-width="145px">
+                        <template slot="label">标签的后缀<help-tip prop="formSuffix" /></template>
+                        <el-switch v-model="formDef.attrs.colon" @change="changeColon" />
+                        <el-input
+                            v-if="formDef.attrs.colon"
+                            v-model="labelSuf"
+                            placeholder="标签文本的后缀"
+                        />
+                    </el-form-item>
+                    <el-form-item label-width="145px">
+                        <template slot="label">隐藏必填的星号<help-tip prop="formAsterisk" /></template>
+                        <el-switch v-model="formDef.attrs.hideRequiredAsterisk" />
+                    </el-form-item>
+                    <el-form-item label-width="145px" label="">
+                        <template slot="label">标签描述位置<help-tip prop="descPosition" /></template>
+                        <el-radio-group v-model="formDef.attrs.descPosition">
+                            <el-radio-button label="lableIcon">标签图标</el-radio-button>
+                            <el-radio-button label="inline">底部一行</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="文本只读显示样式" label-width="125px">
+                        <el-select v-model="formDef.attrs.read_style" style="width:100%;">
+                            <el-option label="文本展示" value="text" />
+                            <el-option label="原样展示" value="original" />
+                        </el-select>
+                    </el-form-item>
 
-          <el-form-item label="水印设置" label-width="125px">
-            <el-switch v-model="formDef.attrs.watermark" />
-            <el-input
-              v-if="formDef.attrs.watermark"
-              v-model="formDef.attrs.watermarkText"
-              placeholder="水印文本"
-            />
-          </el-form-item>
+                    <el-form-item label="水印设置" label-width="125px">
+                        <el-switch v-model="formDef.attrs.watermark" />
+                        <el-input
+                            v-if="formDef.attrs.watermark"
+                            v-model="formDef.attrs.watermarkText"
+                            placeholder="水印文本"
+                        />
+                    </el-form-item>
 
-        </div>
-      </div>
-      <div class="panel panel-default">
-        <div class="panel-heading">移动端表单配置
-          &nbsp;<el-tooltip content="跟PC端一致" placement="bottom">
-            <el-switch v-model="isSame" @change="changeSame" />
-          </el-tooltip>
-        </div>
-        <div v-if="!isSame" class="panel-body">
-          <el-form-item label="标签宽度">
-            <el-row>
-              <el-col :span="12">
-                <el-input-number
-                  v-model="formDef.attrs.mobileLabelWidth"
-                  :min="formDef.attrs.mobileLabelWidthUnit==='px'?50:10"
-                  :max="formDef.attrs.mobileLabelWidthUnit==='px'?500:100"
-                  :step="1"
-                  style="width: 100%;"
-                />
-              </el-col>
-              <el-col :span="11">
-                <el-select v-model="formDef.attrs.mobileLabelWidthUnit" style="width: 100%;" @change="changeMobileLabelWidthUnit">
-                  <el-option label="像素(px)" value="px" />
-                  <el-option label="百分比(%)" value="%" />
-                </el-select>
-              </el-col>
-            </el-row>
-          </el-form-item>
+                </div>
+            </div>
+            <div class="panel panel-default">
+                <div class="panel-heading">移动端表单配置
+                    &nbsp;<el-tooltip content="跟PC端一致" placement="bottom">
+                        <el-switch v-model="isSame" @change="changeSame" />
+                    </el-tooltip>
+                </div>
+                <div v-if="!isSame" class="panel-body">
+                    <el-form-item label="标签宽度">
+                        <el-row>
+                            <el-col :span="12">
+                                <el-input-number
+                                    v-model="formDef.attrs.mobileLabelWidth"
+                                    :min="formDef.attrs.mobileLabelWidthUnit==='px'?50:10"
+                                    :max="formDef.attrs.mobileLabelWidthUnit==='px'?500:100"
+                                    :step="1"
+                                    style="width: 100%;"
+                                />
+                            </el-col>
+                            <el-col :span="11">
+                                <el-select v-model="formDef.attrs.mobileLabelWidthUnit" style="width: 100%;" @change="changeMobileLabelWidthUnit">
+                                    <el-option label="像素(px)" value="px" />
+                                    <el-option label="百分比(%)" value="%" />
+                                </el-select>
+                            </el-col>
+                        </el-row>
+                    </el-form-item>
 
-          <el-form-item label="标签对齐">
-            <el-radio-group v-model="formDef.attrs.mobileLabelPosition">
-              <el-radio-button label="left">左对齐</el-radio-button>
-              <el-radio-button label="top">顶部对齐</el-radio-button>
-              <el-radio-button label="right">右对齐</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
+                    <el-form-item label="标签对齐">
+                        <el-radio-group v-model="formDef.attrs.mobileLabelPosition">
+                            <el-radio-button label="left">左对齐</el-radio-button>
+                            <el-radio-button label="top">顶部对齐</el-radio-button>
+                            <el-radio-button label="right">右对齐</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
 
-          <el-form-item label="输入框对齐方式">
-            <el-radio-group v-model="formDef.attrs.mobileInputAlign">
-              <el-radio-button label="left">左对齐</el-radio-button>
-              <el-radio-button label="center">居中对齐</el-radio-button>
-              <el-radio-button label="right">右对齐</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
+                    <el-form-item label="输入框对齐方式">
+                        <el-radio-group v-model="formDef.attrs.mobileInputAlign">
+                            <el-radio-button label="left">左对齐</el-radio-button>
+                            <el-radio-button label="center">居中对齐</el-radio-button>
+                            <el-radio-button label="right">右对齐</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
 
-        </div>
-      </div>
+                </div>
+            </div>
 
-      <!-- <div class="panel panel-default">
-        <div class="panel-heading">提交设置<help-tip prop="formSubmit" /></div>
-        <div class="panel-body">
-          <el-form-item label="开启后端验证" label-width="125px">
-            <el-switch v-model="formDef.attrs.validated" />
-          </el-form-item>
-          <el-form-item label="开启提交冲突提示" label-width="125px">
-            <el-switch v-model="formDef.attrs.conflict" />
-          </el-form-item>
-        </div>
-      </div> -->
+            <!-- <div class="panel panel-default">
+                <div class="panel-heading">提交设置<help-tip prop="formSubmit" /></div>
+                <div class="panel-body">
+                    <el-form-item label="开启后端验证" label-width="125px">
+                        <el-switch v-model="formDef.attrs.validated" />
+                    </el-form-item>
+                    <el-form-item label="开启提交冲突提示" label-width="125px">
+                        <el-switch v-model="formDef.attrs.conflict" />
+                    </el-form-item>
+                </div>
+            </div> -->
 
-      <div class="panel panel-default">
-        <div class="panel-heading">其他设置</div>
-        <div class="panel-body">
-          <el-form-item label="隐藏表单标题" label-width="125px">
-            <el-switch v-model="formDef.attrs.hide_name" />
-          </el-form-item>
-          <el-form-item v-if="!formDef.attrs.hide_name" label="表单标题对齐" label-width="125px">
-            <el-radio-group v-model="formDef.attrs.title_position">
-              <el-radio-button label="left">左对齐</el-radio-button>
-              <el-radio-button label="center">居中</el-radio-button>
-              <el-radio-button label="right">右对齐</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item v-if="!formDef.attrs.hide_name" label="隐藏表单描述" label-width="125px">
-            <el-switch v-model="formDef.attrs.hide_desc" />
-          </el-form-item>
-        </div>
-      </div>
-    </el-form>
+            <div class="panel panel-default">
+                <div class="panel-heading">其他设置</div>
+                <div class="panel-body">
+                    <el-form-item label="隐藏表单标题" label-width="125px">
+                        <el-switch v-model="formDef.attrs.hide_name" />
+                    </el-form-item>
+                    <el-form-item v-if="!formDef.attrs.hide_name" label="表单标题对齐" label-width="125px">
+                        <el-radio-group v-model="formDef.attrs.title_position">
+                            <el-radio-button label="left">左对齐</el-radio-button>
+                            <el-radio-button label="center">居中</el-radio-button>
+                            <el-radio-button label="right">右对齐</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
+                    <el-form-item v-if="!formDef.attrs.hide_name" label="隐藏表单描述" label-width="125px">
+                        <el-switch v-model="formDef.attrs.hide_desc" />
+                    </el-form-item>
+                </div>
+            </div>
+        </el-form>
 
-    <formula-edit
-      :visible="formulaEditVisible"
-      :title="'表单校验'"
-      :bo-data="boData"
-      :data="formVerify"
-      verify
-      @callback="handlerFormVerify"
-      @close="visible => formulaEditVisible = visible"
-    />
+        <formula-edit
+            :visible="formulaEditVisible"
+            :title="'表单校验'"
+            :bo-data="boData"
+            :data="formVerify"
+            verify
+            @callback="handlerFormVerify"
+            @close="visible => formulaEditVisible = visible"
+        />
 
-    <form-script
-      :visible="formScriptVisible"
-      :title="formScriptTitle"
-      :bo-data="boData"
-      :data="formScript"
-      @callback="handlerFormScript"
-      @close="visible => formScriptVisible = visible"
-    />
-  </div>
+        <form-script
+            :visible="formScriptVisible"
+            :title="formScriptTitle"
+            :bo-data="boData"
+            :data="formScript"
+            @callback="handlerFormScript"
+            @close="visible => formScriptVisible = visible"
+        />
+    </div>
 </template>
 <script>
 import IbpsTypeSelect from '@/business/platform/cat/type/select'
@@ -271,180 +276,180 @@ import FormScript from '../components/form-script'
  * 表单属性
  */
 export default {
-  name: 'form-property',
-  components: {
-    IbpsTypeSelect,
-    FormulaEdit,
-    FormScript
-  },
-  props: {
-    data: {
-      type: Object
+    name: 'form-property',
+    components: {
+        IbpsTypeSelect,
+        FormulaEdit,
+        FormScript
     },
-    id: String,
-    boData: {
-      type: Array
-    }
-  },
-  data() {
-    return {
-      formulaEditVisible: false,
-      index: -1,
-      formVerify: '',
-      formScriptVisible: false,
-      formType: 'pc',
-      formScriptTitle: '表单脚本',
-      formDef: {
-        name: '',
-        key: '',
-        typeId: '',
-        desc: ''
-      },
-      rules: {
-        name: [{ required: true, message: this.$t('validate.required') }],
-        key: [{ required: true, message: this.$t('validate.required') }]
-      },
-      same: this.formDef && this.formDef.attrs ? this.$utils.toBoolean(this.formDef.attrs.same, true) : true,
-      labelSuf: this.formDef && this.formDef.attrs ? this.formDef.attrs.labelSuffix || '' : ':'
-    }
-  },
-  computed: {
-    formVerifyList() {
-      return this.formDef.attrs.verifys || []
-    },
-    formScript() {
-      return this.formType === 'mobile' ? this.formDef.attrs.mobile_script || '' : this.formDef.attrs.script || ''
-    },
-    isSame: {
-      get() {
-        return this.$utils.toBoolean(this.same, true)
-      },
-      set(val) {
-        this.same = val
-        this.$set(this.formDef.attrs, 'same', this.isSame)
-      }
-    },
-    labelSuffix: {
-      get() {
-        return this.labelSuf
-      },
-      set(val) {
-        this.labelSuf = val
-        this.$set(this.formDef.attrs, 'labelSuffix', val)
-      }
-    }
-  },
-  watch: {
-    data: {
-      handler: function(val, oldVal) {
-        this.formDef = this.data
-      },
-      immediate: true,
-      deep: true
-    },
-    formDef: {
-      handler: function(val, oldVal) {
-        this.$emit('update', val)
-      },
-      deep: true
-    },
-    same: {
-      handler(val, oldVal) {
-        if (this.$utils.isEmpty(this.formDef.attrs.same)) {
-          this.isSame = true
-          this.$set(this.formDef.attrs, 'same', this.isSame)
-        } else {
-          if (val !== oldVal) {
-            this.isSame = val
-            this.$set(this.formDef.attrs, 'same', this.isSame)
-          }
+    props: {
+        data: {
+            type: Object
+        },
+        id: String,
+        boData: {
+            type: Array
         }
-      },
-      immediate: true
     },
-    labelSuf: {
-      handler(val, oldVal) {
-        if (this.$utils.isEmpty(this.formDef.attrs.labelSuffix)) {
-          this.labelSuf = val
-          this.$set(this.formDef.attrs, 'labelSuffix', this.labelSuf)
-        } else {
-          if (val !== oldVal) {
-            this.labelSuf = val
-            this.$set(this.formDef.attrs, 'labelSuffix', this.labelSuf)
-          }
+    data () {
+        return {
+            formulaEditVisible: false,
+            index: -1,
+            formVerify: '',
+            formScriptVisible: false,
+            formType: 'pc',
+            formScriptTitle: '表单脚本',
+            formDef: {
+                name: '',
+                key: '',
+                typeId: '',
+                desc: ''
+            },
+            rules: {
+                name: [{ required: true, message: this.$t('validate.required') }],
+                key: [{ required: true, message: this.$t('validate.required') }]
+            },
+            same: this.formDef && this.formDef.attrs ? this.$utils.toBoolean(this.formDef.attrs.same, true) : true,
+            labelSuf: this.formDef && this.formDef.attrs ? this.formDef.attrs.labelSuffix || '' : ':'
         }
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    changeLabelWidthUnit(value) {
-      this.formDef.attrs.labelWidth = value === 'px' ? 100 : 20
-    },
-    changeColon(value) {
-      this.formDef.attrs.labelSuffix = value ? ':' : ''
-      this.labelSuf = this.formDef.attrs.labelSuffix
     },
-    changeSame(value) {
-      if (!value) {
-        this.formDef.attrs = Object.assign({}, this.formDef.attrs, {
-          mobileLabelWidth: 100,
-          mobileLabelWidthUnit: 'px',
-          mobileLabelPosition: 'left',
-          mobileInputAlign: 'right'
-        })
-      }
+    computed: {
+        formVerifyList () {
+            return this.formDef.attrs.verifys || []
+        },
+        formScript () {
+            return this.formType === 'mobile' ? this.formDef.attrs.mobile_script || '' : this.formDef.attrs.script || ''
+        },
+        isSame: {
+            get () {
+                return this.$utils.toBoolean(this.same, true)
+            },
+            set (val) {
+                this.same = val
+                this.$set(this.formDef.attrs, 'same', this.isSame)
+            }
+        },
+        labelSuffix: {
+            get () {
+                return this.labelSuf
+            },
+            set (val) {
+                this.labelSuf = val
+                this.$set(this.formDef.attrs, 'labelSuffix', val)
+            }
+        }
     },
-    changeMobileLabelWidthUnit(value) {
-      this.formDef.attrs.mobileLabelWidth = value === 'px' ? 100 : 20
+    watch: {
+        data: {
+            handler: function (val, oldVal) {
+                this.formDef = this.data
+            },
+            immediate: true,
+            deep: true
+        },
+        formDef: {
+            handler: function (val, oldVal) {
+                this.$emit('update', val)
+            },
+            deep: true
+        },
+        same: {
+            handler (val, oldVal) {
+                if (this.$utils.isEmpty(this.formDef.attrs.same)) {
+                    this.isSame = true
+                    this.$set(this.formDef.attrs, 'same', this.isSame)
+                } else {
+                    if (val !== oldVal) {
+                        this.isSame = val
+                        this.$set(this.formDef.attrs, 'same', this.isSame)
+                    }
+                }
+            },
+            immediate: true
+        },
+        labelSuf: {
+            handler (val, oldVal) {
+                if (this.$utils.isEmpty(this.formDef.attrs.labelSuffix)) {
+                    this.labelSuf = val
+                    this.$set(this.formDef.attrs, 'labelSuffix', this.labelSuf)
+                } else {
+                    if (val !== oldVal) {
+                        this.labelSuf = val
+                        this.$set(this.formDef.attrs, 'labelSuffix', this.labelSuf)
+                    }
+                }
+            },
+            immediate: true
+        }
     },
+    methods: {
+        changeLabelWidthUnit (value) {
+            this.formDef.attrs.labelWidth = value === 'px' ? 100 : 20
+        },
+        changeColon (value) {
+            this.formDef.attrs.labelSuffix = value ? ':' : ''
+            this.labelSuf = this.formDef.attrs.labelSuffix
+        },
+        changeSame (value) {
+            if (!value) {
+                this.formDef.attrs = Object.assign({}, this.formDef.attrs, {
+                    mobileLabelWidth: 100,
+                    mobileLabelWidthUnit: 'px',
+                    mobileLabelPosition: 'left',
+                    mobileInputAlign: 'right'
+                })
+            }
+        },
+        changeMobileLabelWidthUnit (value) {
+            this.formDef.attrs.mobileLabelWidth = value === 'px' ? 100 : 20
+        },
 
-    // 添加、编辑
-    editFormVerify(index = -1) {
-      this.index = index
-      this.formulaEditVisible = true
-      this.formVerify = this.formVerifyList[index]
-    },
-    // 删除表单校验条件
-    removeFormVerify(index) {
-      this.formDef.attrs.verifys.splice(index, 1)
-    },
-    handlerFormVerify(data) {
-      if (this.index > -1) {
-        this.formDef.attrs.verifys.splice(this.index, 1, data)
-      } else {
-        this.formDef.attrs.verifys.push(data)
-      }
-    },
-    /**
-     * 表单规则
-     */
-    editFormRule() {
+        // 添加、编辑
+        editFormVerify (index = -1) {
+            this.index = index
+            this.formulaEditVisible = true
+            this.formVerify = this.formVerifyList[index]
+        },
+        // 删除表单校验条件
+        removeFormVerify (index) {
+            this.formDef.attrs.verifys.splice(index, 1)
+        },
+        handlerFormVerify (data) {
+            if (this.index > -1) {
+                this.formDef.attrs.verifys.splice(this.index, 1, data)
+            } else {
+                this.formDef.attrs.verifys.push(data)
+            }
+        },
+        /**
+         * 表单规则
+         */
+        editFormRule () {
 
-    },
-    /**
-     * 表单脚本
-     */
-    editFormScript(formType = 'pc') {
-      this.formType = formType
-      this.formScriptTitle = formType === 'mobile' ? '移动端表单脚本' : '表单脚本'
-      this.formScriptVisible = true
-    },
-    handlerFormScript(value) {
-      if (this.formType === 'mobile') {
-        this.$set(this.formDef.attrs, 'mobile_script', value)
-      } else {
-        this.$set(this.formDef.attrs, 'script', value)
-      }
-    },
+        },
+        /**
+         * 表单脚本
+         */
+        editFormScript (formType = 'pc') {
+            this.formType = formType
+            this.formScriptTitle = formType === 'mobile' ? '移动端表单脚本' : '表单脚本'
+            this.formScriptVisible = true
+        },
+        handlerFormScript (value) {
+            if (this.formType === 'mobile') {
+                this.$set(this.formDef.attrs, 'mobile_script', value)
+            } else {
+                this.$set(this.formDef.attrs, 'script', value)
+            }
+        },
 
-    handleInput(key, val) {
-      this.$set(this.formDef, key, val)
-      this.$emit('update', JSON.parse(JSON.stringify(this.formDef)))
-    },
-    editWatermark() {
+        handleInput (key, val) {
+            this.$set(this.formDef, key, val)
+            this.$emit('update', JSON.parse(JSON.stringify(this.formDef)))
+        },
+        editWatermark () {
 
+        }
     }
-  }
 }
 </script>

+ 1 - 1
src/business/platform/form/formrender/dynamic-form/dynamic-form.vue

@@ -5,7 +5,7 @@
             <!--表头-->
             <div v-if="hasHeader" class="form-header">
                 <div v-if="hasHeader" class="title" style="font-size: 22px; font-family: SimHei" :class="titlePosition">
-                    {{ formDef.processName ? formDef.processName : formDef.name }}
+                    {{ formDef.processName ||formDef.attrs.title_field || formDef.name }}
                     <span v-if="formDef && formDef.flowName">{{ formDef.flowName }}</span>
                     <relevance-table
                         v-if="titleList.length > 0 && (formParams.formAttrs.customClass && formParams.formAttrs.customClass.includes('true'))"

+ 1 - 1
src/components/ibps-crud/index.vue

@@ -95,6 +95,7 @@
             <el-table
                 ref="elTable"
                 v-loading="loading"
+                class="elTable"
                 v-bind="options"
                 :row-key="pkKey"
                 :data="ibpsData"
@@ -542,7 +543,6 @@ export default {
     }
     /* 表单组件渲染时计算表单高度受转换元素影响(附件、人员、部门等) */
     .elTable .el-table__body-wrapper{
-        height: v-bind(tableHeight);
         overflow-y: auto;
     }
 </style>

+ 29 - 2
src/components/ibps-fullcalendar/index.vue

@@ -27,14 +27,25 @@ export default {
     props: {
         options: {
             type: Object,
-            default: () => {}
+            default: () => ({})
+        },
+        // 新增配置项:是否隐藏其他月份日期
+        hideOtherMonthDays: {
+            type: Boolean,
+            default: false
         }
     },
     data () {
         return {
             calendarOptions: {
                 plugins: [dayGridPlugin, timeGridPlugin, listPlugin, bootstrapPlugin, interactionPlugin],
-                initialView: 'dayGridMonth'
+                initialView: 'dayGridMonth',
+                fixedWeekCount: false,
+                views: {
+                    dayGridMonth: {
+                        showNonCurrentDates: !this.hideOtherMonthDays // 是否隐藏非当前月日期
+                    }
+                }
             }
         }
     },
@@ -49,6 +60,22 @@ export default {
         locale () {
             return lang.localeMap[I18n.getLanguage()]
         }
+    },
+    watch: {
+        hideOtherMonthDays: {
+            handler (newVal) {
+                const calendarApi = this.$refs.fullCalendar?.getApi()
+                if (calendarApi) {
+                    calendarApi.setOption('views', {
+                        dayGridMonth: {
+                            showNonCurrentDates: !this.hideOtherMonthDays // 根据 prop 反转逻辑
+                        }
+                    })
+                    calendarApi.render() // 强制重新渲染
+                }
+            },
+            immediate: true
+        }
     }
 }
 </script>

+ 45 - 15
src/utils/query.js

@@ -37,77 +37,107 @@
         "01-室内温湿度监控": {
           "label": "室内温湿度监控",
           "path": "/sshjgl/wdjc/snwsdjkcd",
-          "showDevice": false
+          "showDevice": false,
+          "displayField":[],
+          "requireField": ['fang_jian_']
         },
         "02-冰箱温度监控": {
           "label": "冰箱温度监控",
           "path": "/sshjgl/wdjc/bxwdjc",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": ['deviceno1_','devicename1_']
         },
         "03-温浴箱温度监控": {
           "label": "温浴箱温度监控",
           "path": "/sshjgl/wdjc/wyxwdjkywh",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": ['deviceno1_','devicename1_']
         },
         "04-阴凉柜温度监控": {
           "label": "阴凉柜温度监控",
           "path": "/sshjgl/wdjc/ylgwdjc",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": ['deviceno1_','devicename1_']
         },
         "05-纯水机水质监测": {
           "label": "纯水机水质监测",
           "path": "/sshjgl/csjszjcb",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "06-每日安全检查": {
           "label": "每日安全检查",
           "path": "/sshjgl/aqgl/mraqjc",
-          "showDevice": false
+          "showDevice": false,
+          "displayField": [],
+          "requireField": []
         },
         "07-每月安全检查": {
           "label": "每月安全检查",
           "path": "/sshjgl/aqgl/myaqjc",
-          "showDevice": true
+          "showDevice": true,
+          displayField: ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "08-含氯有效性监测": {
           "label": "含氯有效性监测",
           "path": "/sshjgl/aqgl/hlyxxjc",
-          "showDevice": false
+          "showDevice": false,
+          "displayField": [],
+          "requireField": []
         },
         "10-洗眼器检查": {
           "label": "洗眼器检查",
           "path": "/sshjgl/aqgl/xyqjc",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "11-紧急淋浴器检查": {
           "label": "紧急淋浴器检查",
           "path": "/sshjgl/aqgl/jjlyqjc",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "12-紫外灯消毒": {
           "label": "紫外灯消毒",
           "path": "/sshjgl/aqgl/jykzwdxdjlb",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "13-高压灭菌": {
           "label": "高压灭菌",
           "path": "/sshjgl/aqgl/gymjjlb",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "14-空气消毒机": {
           "label": "空气消毒机",
           "path": "/sshjgl/aqgl/xdjsyjlb",
-          "showDevice": true
+          "showDevice": true,
+          "displayField": ['deviceno1_','devicename1_'],
+          "requireField": []
         },
         "15-日常防护消毒": {
           "label": "日常防护消毒",
           "path": "/sshjgl/aqgl/rcfhxd",
-          "showDevice": false
+          "showDevice": false,
+          "displayField": [],
+          "requireField": []
         },
         "16-设备排出废液": {
            "label": "设备排出废液",
            "path": "/sshjgl/aqgl/sbpcfyxd",
-           "showDevice": true
+           "showDevice": true,
+           "displayField": ['deviceno1_','devicename1_'],
+           "requireField": ['deviceno1_','devicename1_']
         }
       }
     },

+ 8 - 1
src/views/component/facility/facilityData.vue

@@ -222,7 +222,7 @@ export default {
                     item.startTime = ''
                 }
 
-                // this.formData.jianCeShiJian = '2024-10-20' // 测试用
+                // this.formData.jianCeShiJian = '2025-03-01' // 测试用
                 if (!item.result && (item.rate && (this.formData.jianCeShiJian || this.readonly))) {
                     let jianCeShiJian = ''
                     if (this.readonly) {
@@ -236,6 +236,8 @@ export default {
                         day = 7
                     }
                     const dayofMonth = thatDate.getDate() // 多少号
+                    const monthofYear = thatDate.getMonth() + 1 // 多少月
+                    const monthInQuarter = monthofYear % 3 === 0 ? 3 : monthofYear % 3 // 计算当前月在当前季度中的第几个月
                     let dayDiff = ''
                     console.log(`监测时间:${jianCeShiJian},周${day}`)
                     switch (item.period) {
@@ -254,6 +256,11 @@ export default {
                                 result.push(item)
                             }
                             break
+                        case 'quarter':
+                            if (item.date === monthInQuarter && dayofMonth === 1) {
+                                result.push(item)
+                            }
+                            break
                         case 'repeat':
                             dayDiff = this.getDayDifference(item.startTime, jianCeShiJian)
                             if (dayDiff >= 0 && dayDiff % (item.date + 1) === 0) {

+ 12 - 1
src/views/component/facility/facilityDataDialog.vue

@@ -52,6 +52,14 @@
                                         :value="item"
                                     />
                                 </el-select>
+                                <el-select v-if="form.period==='quarter'" v-model="form.date" placeholder="请选择" size="mini" style="width:100%">
+                                    <el-option
+                                        v-for="item in 3"
+                                        :key="item"
+                                        :label="`第${item}个月`"
+                                        :value="item"
+                                    />
+                                </el-select>
                                 <div v-if="form.period==='repeat'" style="display:flex;align-items: center;width:100%">
                                     <el-select v-model="form.date" placeholder="请选择" size="mini" style="width:100%">
                                         <el-option
@@ -131,7 +139,7 @@ export default {
                 date: '',
                 startTime: dayjs().format('YYYY-MM-DD')
             },
-            periodList: [{ label: '日监测', value: 'day' }, { label: '周监测', value: 'week' }, { label: '月监测', value: 'month' }, { label: '按时间间隔监测', value: 'repeat' }],
+            periodList: [{ label: '日监测', value: 'day' }, { label: '周监测', value: 'week' }, { label: '月监测', value: 'month' }, { label: '季度监测', value: 'quarter' }, { label: '按时间间隔监测', value: 'repeat' }],
             weekDays: [{ label: '周一', value: 1 }, { label: '周二', value: 2 }, { label: '周三', value: 3 }, { label: '周四', value: 4 }, { label: '周五', value: 5 }, { label: '周六', value: 6 }, { label: '周日', value: 7 }]
         }
     },
@@ -166,6 +174,9 @@ export default {
                     case 'month':
                         rate = '每个月第' + this.form.date + '天'
                         break
+                    case 'quarter':
+                        rate = '每个季度第' + this.form.date + '个月'
+                        break
                     case 'repeat':
                         rate = this.form.startTime + '起每隔' + this.form.date + '天'
                         break

+ 2 - 1
src/views/component/inspectionProcess/uncertainty.vue

@@ -162,7 +162,8 @@ export default {
             handler (val) {
                 this.tableData = val
                 // console.log('val', val)
-            }
+            },
+            immediate: true
         }
     },
     methods: {

+ 2 - 1
src/views/component/qualityControl/index.vue

@@ -124,7 +124,8 @@ export default {
                     // console.log(this.formData)
                     this.tableData = val
                 }
-            }
+            },
+            immediate: true
         },
         tableData: {
             handler (val) {

+ 14 - 3
src/views/component/shiftHandover/earlyHandover.vue

@@ -630,7 +630,13 @@ export default {
                             const { variables: { data: data3 }} = await this.$common.request('sql', sql3)
                             const peopleList = [...new Set(data3.map(item => item.ren_yuan_id_))]
                             let shi_ji_qian_dao_r = ''
-                            if (peopleList.length > 0) shi_ji_qian_dao_r = peopleList.join(',')
+                            // 提交校验试剂签到人员不能为空
+                            if (peopleList.length > 0) {
+                                shi_ji_qian_dao_r = peopleList.join(',')
+                            } else {
+                                return false
+                            }
+                            console.log(shi_ji_qian_dao_r, 2)
                             // 2.生成快照
                             const formName = '人员/检验科早交班登记表.rpx'
                             const res = await this.$common.snapshoot({
@@ -717,8 +723,13 @@ export default {
                 }
                 const peopleList = [...new Set(tempPeople)]
                 let shi_ji_qian_dao_r = ''
-                if (peopleList.length > 0) shi_ji_qian_dao_r = peopleList.join(',')
-                console.log(shi_ji_qian_dao_r)
+                // 提交校验试剂签到人员不能为空,保存可以为空
+                if (peopleList.length > 0) {
+                    shi_ji_qian_dao_r = peopleList.join(',')
+                } else if (!flag && peopleList.length == 0) {
+                    return this.$message.warning('实际签到人员不能为空,请完成签到')
+                }
+                console.log(shi_ji_qian_dao_r, 1)
                 // 2.更新主表展示内容
                 const updateParamsRecord = {
                     tableName: 't_jykzjbdjb',

+ 2 - 1
src/views/component/supplier/assessment.vue

@@ -57,7 +57,8 @@ export default {
             handler (val) {
                 this.$emit('change-data', 'gyspjbzb', val)
             },
-            deep: true
+            deep: true,
+            immediate: true
         }
     },
     methods: {

+ 1 - 0
src/views/platform/auth/appres/manage.vue

@@ -18,6 +18,7 @@
                     slot="searchForm"
                     v-model="systemId"
                     placeholder="请先设置子系统"
+                    style="width: 100%"
                     @change="changeSystem"
                 >
                     <el-option

+ 1 - 0
src/views/platform/auth/resources/manage.vue

@@ -18,6 +18,7 @@
                     slot="searchForm"
                     v-model="systemId"
                     placeholder="请先设置子系统"
+                    style="width: 100%"
                     @change="changeSystem"
                 >
                     <el-option

+ 24 - 6
src/views/platform/bpmn/bpmInstHis/list.vue

@@ -180,6 +180,7 @@ import BpmnFormrender from '@/business/platform/bpmn/form/dialog'
 import IbpsAttachment from '@/business/platform/file/attachment/selector'
 import { specialType, specialBtn, specialParams, specialTable, specialField } from './corresponding/index'
 import TemplateList from './templateList'
+import { getSetting } from '@/utils/query'
 
 export default {
     components: {
@@ -267,16 +268,18 @@ export default {
                         { prop: 'tableName', label: '表单名称', itemWidth: 150, placeholder: '请输入', labelWidth: 70 },
                         { prop: 'desc', label: '事务说明', itemWidth: 150, placeholder: '请输入', labelWidth: 70 },
                         { prop: 'createBy', label: '编制人', itemWidth: 150, placeholder: '请输入', labelWidth: 60 },
+                        { prop: ['Q^compile_time^DL', 'Q^compile_time^DG'], label: '编制时间', fieldType: 'daterange', labelWidth: 70, itemWidth: 220 },
                         { prop: ['Q^end_time_^DL', 'Q^end_time_^DG'], label: '完成时间', fieldType: 'daterange', labelWidth: 70, itemWidth: 220 }
                     ]
                 },
                 // 表格字段配置
                 columns: [
-                    { prop: 'deptName', label: '部门', width: 85 },
+                    { prop: 'deptName', label: '部门', width: 110 },
                     { prop: 'procDefName', label: '表单名称', formatter: this.replaceFormName, width: 220 },
                     { prop: 'desc', label: '事务说明', 'min-width': 280 },
-                    { prop: 'endTime', label: '完成时间', sortable: 'custom', width: 135 },
-                    { prop: 'createBy', label: '编制人', width: 70, slotName: 'creator' }
+                    { prop: 'compileTime', label: '编制时间', sortable: 'custom', width: 135, dateFormat: 'yyyy-MM-dd HH:mm' },
+                    { prop: 'endTime', label: '完成时间', sortable: 'custom', width: 135, dateFormat: 'yyyy-MM-dd HH:mm' },
+                    { prop: 'createBy', label: '编制人', width: 100, slotName: 'creator' }
                 ],
                 rowHandle: {
                     actions: [
@@ -287,7 +290,8 @@ export default {
                         // }
                     ],
                     effect: 'display',
-                    width: '100'
+                    width: '100',
+                    colWidth: '100'
                 }
             }
         }
@@ -305,11 +309,25 @@ export default {
 
         }
     },
-    created () {
+    async created () {
         this.loadData()
         this.getConfig()
+        const { reocrdsBoxShowStartDate: showCompileTime = false, reocrdsBoxShowEndDate: showEndTime = true } = await getSetting('system')
+        this.sorts = showCompileTime ? { COMPILE_TIME: 'DESC' } : { END_TIME_: 'DESC' }
+        this.listConfig.searchForm.forms = this.listConfig.searchForm.forms.filter(item => {
+            if (item.label === '编制时间' && !showCompileTime) return false
+            if (item.label === '完成时间' && !showEndTime) return false
+            return true
+        })
+
+        this.listConfig.columns = this.listConfig.columns.filter(column => {
+            if (column.prop === 'completeTime' && !showCompileTime) return false
+            if (column.prop === 'endTime' && !showEndTime) return false
+            return true
+        })
+
         const { role = [] } = this.$store.getters.userInfo || {}
-        const roleList = ['xtgljs', 'xxglxzfzr', 'wjglzzc', 'syszr', 'zhsfzr']
+        const roleList = ['xtgljs', 'xxglxzfzr', 'wjglzzc', 'syszr']
         // 系统管理角色、信息管理负责人、检验科主任添加删除按钮
         const hasRole = role.some(item => roleList.includes(item.alias))
         this.listConfig.toolbars.push({

+ 49 - 22
src/views/platform/data/dataTemplate/template-list.vue

@@ -43,7 +43,8 @@ export default {
     data () {
         return {
             dataTemplate: {},
-            dataTemplateId: ''
+            dataTemplateId: '',
+            query: {}
         }
     },
     watch: {
@@ -53,12 +54,13 @@ export default {
                     return
                 }
                 this.$nextTick(() => {
-                    const defaultUrl = this.$route.meta.defaultUrl
+                    const { defaultUrl } = this.$route.meta || {}
                     const isDashboard = this.$route.name
                     if (this.$utils.isNotEmpty(defaultUrl)) {
                         // 判断地址是否正确
-                        const url = defaultUrl.split('/')
-                        this.dataTemplateId = url[url.length - 1]
+                        const { id, query } = this.parseUrl(defaultUrl) || {}
+                        this.dataTemplateId = id
+                        this.query = query
                     } else if (isDashboard === 'dashboard') {
                         this.dataTemplateId = this.templateId
                     } else {
@@ -100,6 +102,32 @@ export default {
     //     this.loadDataTemplate()
     // },
     methods: {
+        parseUrl (url) {
+            // 处理URL可能包含的前导/尾随斜杠和空格
+            url = (url || '').trim().replace(/^\/|\/$/g, '')
+            // 分割路径和查询部分
+            const [pathPart, queryPart] = url.split('?')
+
+            // 提取ID
+            const idMatch = pathPart.match(/^d\/(\d+)$/)
+            const id = idMatch ? idMatch[1] : null
+
+            // 解析查询参数
+            const query = {}
+            if (queryPart) {
+                queryPart.split('&').forEach(pair => {
+                    const [key, value] = pair.split('=')
+                    if (key) {
+                        query[key] = value || ''
+                    }
+                })
+            }
+
+            return {
+                id: id ? BigInt(id).toString() : null,
+                query
+            }
+        },
         loadDataTemplate () {
             const loading = this.$loading({
                 lock: false,
@@ -120,7 +148,7 @@ export default {
                         const formData = this.$utils.parseData(response.data)
                         const datasets = buildFelds(formData.fields, data.datasets)
                         data.datasets = datasets
-                        this.dataTemplate = data
+                        this.dataTemplate = { ...data, query: this.query }
                         if (this.typeName) {
                             this.dataTemplate.templates = this.dealData(this.dataTemplate)
                         }
@@ -131,7 +159,7 @@ export default {
                         loading.close()
                     })
                 } else {
-                    this.dataTemplate = data
+                    this.dataTemplate = { ...data, query: this.query }
                     setTimeout(() => {
                         loading.close()
                     }, 1000)
@@ -188,27 +216,26 @@ export default {
             const customBtn = buttons.filter(i => i.show_on_record === 'Y')
             return [...defaultBtn, ...customBtn]
         },
-        dealFilter (dataList) {
+        dealFilter (dataList = []) {
             // 1.去除原过滤条件中的编制部门在其中
             // 2.追加数据模板归档中的过滤条件
             // 3.增加地点过滤(若为第一层级用户,则过滤出所有一二级地点数据;若为第二级用户,则过滤当前地点数据)
             const levelFilter = this.getLevelFilter()
-            if (!dataList.length) {
-                // 无过滤条件时默认地点过滤
-                return [
-                    {
-                        label: '默认条件',
-                        key: this.$utils.guid(),
-                        type: 'condition',
-                        rights: [{ type: 'all' }],
-                        filter: {
-                            condition: 'AND',
-                            rules: [levelFilter]
-                        }
+            // 无过滤条件时默认地点过滤
+            const initList = dataList.length ? dataList : [
+                {
+                    label: '默认条件',
+                    key: this.$utils.guid(),
+                    type: 'condition',
+                    rights: [{ type: 'all' }],
+                    filter: {
+                        condition: 'AND',
+                        rules: [levelFilter]
                     }
-                ]
-            }
-            const newDataList = dataList.map(data => {
+                }
+            ]
+
+            const newDataList = initList.map(data => {
                 const rules = data.filter.rules.filter(i => i.id !== 'find_in_set' && !i.value.includes('cscript.findPositionId'))
                 const newRules = [
                     ...this.filterParams.map(item => ({

+ 1 - 1
src/views/platform/examination/exam/edit.vue

@@ -497,7 +497,7 @@ export default {
                 can_kao_ren_yuan_: '',
                 kao_shi_shi_chang: '',
                 zhuang_tai_: '未发布',
-                da_biao_zhan_bi_: 60,
+                da_biao_zhan_bi_: 80,
                 ji_fen_fang_shi_: scoringType.length ? scoringType[0].value : '',
                 kao_shi_miao_shu_: '',
                 yun_xu_bao_ming_: '否',

+ 1 - 1
src/views/platform/examination/questionBank/edit.vue

@@ -444,7 +444,7 @@ export default {
                 xian_kao_ci_shu_: '不限',
                 shi_fou_gong_kai_: '是',
                 ping_fen_ren_: '',
-                da_biao_zhan_bi_: 60,
+                da_biao_zhan_bi_: 80,
                 miao_shu_: '',
                 ti_shu_: 0,
                 isLimit: '0',

+ 205 - 203
src/views/platform/form/formDef/create.vue

@@ -1,85 +1,87 @@
 <template>
-  <el-dialog
-    :visible.sync="dialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    :title="title"
-    class="dialog form-def-create-dialog"
-    @open="getFormData"
-    @close="closeDialog"
-  >
-    <el-form
-      ref="formDefForm"
-      v-loading="dialogLoading"
-      :element-loading-text="$t('common.loading')"
-      :model="formDef"
-      :rules="rules"
-      :label-width="formLabelWidth"
-      @submit.native.prevent
+    <el-dialog
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        append-to-body
+        :title="title"
+        class="dialog form-def-create-dialog"
+        @open="getFormData"
+        @close="closeDialog"
     >
-	<el-form-item v-if="formDef.mode==='bo'" label="业务对象:" prop="code">
-	  <bo-def-selector
-	    v-model="formDef.code"
-	    value-key="code"
-	    @change="handleCodeDef"
-	  />
-	</el-form-item>
-	<el-form-item v-else label="表名:" prop="code">
-	  <table-config-selector v-model="formDef.code" />
-	</el-form-item>
-      <el-form-item label="表单名称:" prop="name">
-        <el-input v-model="formDef.name" v-pinyin="{vm:formDef}" />
-      </el-form-item>
-      <el-form-item label="表单Key:" prop="key">
-        <el-input v-model="formDef.key" />
-      </el-form-item>
-      <el-form-item label="分类:" prop="typeId">
-        <ibps-type-select
-          v-model="formDef.typeId"
-          category-key="BO_TYPE"
-          clearable
-        />
-      </el-form-item>
-      <el-form-item label="表单模式:" prop="mode">
-        <el-select v-model="formDef.mode" style="width:100%;" @change="changeMode">
-          <el-option value="bo" label="业务对象" />
-          <el-option value="codeGen" label="表配置【代码生成】" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="表单构建模式:" prop="buildMode">
-        <el-select v-model="formDef.buildMode" style="width:100%;">
-          <el-option value="default" label="默认模版" />
-          <!-- <el-option value="template" label="表单模版" />
-          <el-option value="table" label="数据表定义模版" /> -->
-        </el-select>
+        <el-form
+            ref="formDefForm"
+            v-loading="dialogLoading"
+            :element-loading-text="$t('common.loading')"
+            :model="formDef"
+            :rules="rules"
+            :label-width="formLabelWidth"
+            @submit.native.prevent
+        >
+            <el-form-item v-if="formDef.mode==='bo'" label="业务对象:" prop="code">
+                <bo-def-selector
+                    v-model="formDef.code"
+                    value-key="code"
+                    @change="handleCodeDef"
+                />
+            </el-form-item>
+            <el-form-item v-else label="表名:" prop="code">
+                <table-config-selector v-model="formDef.code" />
+            </el-form-item>
+            <el-form-item label="表单名称:" prop="name">
+                <el-input v-model="formDef.name" v-pinyin="{vm:formDef}" />
+            </el-form-item>
+            <el-form-item label="表单Key:" prop="key">
+                <el-input v-model="formDef.key" />
+            </el-form-item>
+            <el-form-item label="分类:" prop="typeId">
+                <ibps-type-select
+                    v-model="formDef.typeId"
+                    category-key="BO_TYPE"
+                    clearable
+                    filterable
+                    filter-label="name"
+                />
+            </el-form-item>
+            <el-form-item label="表单模式:" prop="mode">
+                <el-select v-model="formDef.mode" style="width:100%;" @change="changeMode">
+                    <el-option value="bo" label="业务对象" />
+                    <el-option value="codeGen" label="表配置【代码生成】" />
+                </el-select>
+            </el-form-item>
+            <el-form-item label="表单构建模式:" prop="buildMode">
+                <el-select v-model="formDef.buildMode" style="width:100%;">
+                    <el-option value="default" label="默认模版" />
+                    <!-- <el-option value="template" label="表单模版" />
+                    <el-option value="table" label="数据表定义模版" /> -->
+                </el-select>
 
-      </el-form-item>
+            </el-form-item>
 
-    </el-form>
-    <div slot="footer" class="el-dialog--center">
-      <el-button type="primary" icon="ibps-icon-arrow-circle-right" @click="handleNext()">下一步</el-button>
-      <el-button icon="el-icon-circle-close" @click="closeDialog()">取 消</el-button>
-    </div>
-    <form-builder
-      :visible="formbuilderDialogVisible"
-      :data="formDefData"
-      @callback="$emit('callback')"
-      @close="visible => formbuilderDialogVisible = visible"
-    />
-    <select-template
-      :visible="selectTemplateDialogVisible"
-      @callback="design"
-      @close="visible => selectTemplateDialogVisible = visible"
-    />
+        </el-form>
+        <div slot="footer" class="el-dialog--center">
+            <el-button type="primary" icon="ibps-icon-arrow-circle-right" @click="handleNext()">下一步</el-button>
+            <el-button icon="el-icon-circle-close" @click="closeDialog()">取 消</el-button>
+        </div>
+        <form-builder
+            :visible="formbuilderDialogVisible"
+            :data="formDefData"
+            @callback="$emit('callback')"
+            @close="visible => formbuilderDialogVisible = visible"
+        />
+        <select-template
+            :visible="selectTemplateDialogVisible"
+            @callback="design"
+            @close="visible => selectTemplateDialogVisible = visible"
+        />
 
-    <select-table-template
-      :visible="selectTableTemplateDialogVisible"
-      @callback="design"
-      @close="visible => selectTableTemplateDialogVisible = visible"
-    />
+        <select-table-template
+            :visible="selectTableTemplateDialogVisible"
+            @callback="design"
+            @close="visible => selectTableTemplateDialogVisible = visible"
+        />
 
-  </el-dialog>
+    </el-dialog>
 </template>
 
 <script>
@@ -99,147 +101,147 @@ import { testKey } from '@/utils/validate'
 import i18n from '@/utils/i18n'
 
 var validateFormKey = (rule, formKey, callback) => {
-  if (!testKey(formKey)) {
-    callback(new Error(i18n.t('validate.key')))
-  } else {
-    isFormKeyExists({
-      formKey: formKey,
-      formDefId: 'xxx'
-    }).then(response => {
-      if (response.data === true) {
-        callback(new Error(`表单key已经存在`))
-        return
-      }
-      callback()
-    }).catch((err) => {
-      callback(new Error(err))
-    })
-  }
+    if (!testKey(formKey)) {
+        callback(new Error(i18n.t('validate.key')))
+    } else {
+        isFormKeyExists({
+            formKey: formKey,
+            formDefId: 'xxx'
+        }).then(response => {
+            if (response.data === true) {
+                callback(new Error(`表单key已经存在`))
+                return
+            }
+            callback()
+        }).catch((err) => {
+            callback(new Error(err))
+        })
+    }
 }
 
 export default {
-  components: {
-    IbpsTypeSelect,
-    BoDefSelector,
-    TableConfigSelector,
-    FormBuilder,
-    SelectTemplate,
-    SelectTableTemplate
-  },
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
+    components: {
+        IbpsTypeSelect,
+        BoDefSelector,
+        TableConfigSelector,
+        FormBuilder,
+        SelectTemplate,
+        SelectTableTemplate
     },
-    title: String,
-    typeId: String
-  },
-  data() {
-    return {
-      formName: 'formDefForm',
-      formLabelWidth: '120px',
-      dialogVisible: this.visible,
-      dialogLoading: false,
-      formbuilderDialogVisible: false,
-      selectTemplateDialogVisible: false,
-      selectTableTemplateDialogVisible: false,
-      defaultForm: {},
-      formDef: {
-        name: '',
-        key: '',
-        typeId: '',
-        mode: 'bo',
-        code: '',
-        busId: '',
-        buildMode: 'default'
-      },
-      rules: {
-        name: [{ required: true, message: this.$t('validate.required') },
-          { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
-        key: [{ required: true, message: this.$t('validate.required') },
-          { validator: validateFormKey, trigger: 'change' },
-          { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
-        mode: [{ required: true, message: this.$t('validate.required') }],
-        code: [{ required: true, message: this.$t('validate.required') }]
-      },
-      formDefData: {}
-    }
-  },
-  watch: {
-    visible: {
-      handler: function(val, oldVal) {
-        this.dialogVisible = this.visible
-      },
-      immediate: true
-    }
-  },
-  created() {
-    this.defaultForm = JSON.parse(JSON.stringify(this.formDef))
-  },
-  methods: {
-    changeMode() {
-      this.formDef.code = ''
-      this.formDef.busId = ''
+    props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        title: String,
+        typeId: String
     },
-    handleCodeDef(data) {
-      this.formDef.busId = data.id
-    },
-    // 下一步
-    handleNext() {
-      this.$refs[this.formName].validate(valid => {
-        if (valid) {
-          this.nextData()
-        } else {
-          ActionUtils.saveErrorMessage()
+    data () {
+        return {
+            formName: 'formDefForm',
+            formLabelWidth: '120px',
+            dialogVisible: this.visible,
+            dialogLoading: false,
+            formbuilderDialogVisible: false,
+            selectTemplateDialogVisible: false,
+            selectTableTemplateDialogVisible: false,
+            defaultForm: {},
+            formDef: {
+                name: '',
+                key: '',
+                typeId: '',
+                mode: 'bo',
+                code: '',
+                busId: '',
+                buildMode: 'default'
+            },
+            rules: {
+                name: [{ required: true, message: this.$t('validate.required') },
+                    { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
+                key: [{ required: true, message: this.$t('validate.required') },
+                    { validator: validateFormKey, trigger: 'change' },
+                    { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
+                mode: [{ required: true, message: this.$t('validate.required') }],
+                code: [{ required: true, message: this.$t('validate.required') }]
+            },
+            formDefData: {}
         }
-      })
-    },
-    // 下一步数据
-    nextData() {
-      if (this.formDef.buildMode === 'default') {
-        this.design()
-      } else {
-        // TODO: 其他表单模版类型处理
-      }
-    },
-    design(template) {
-      this.formDefData = this.formDef
-      this.formbuilderDialogVisible = true
-      this.closeDialog()
     },
-    // 关闭当前窗口
-    closeDialog() {
-      this.$emit('close', false)
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+            },
+            immediate: true
+        }
     },
-    /**
-     * 表单验证
-     */
-    formValidate() {
-      this.$nextTick(() => {
-        this.$refs[this.formName].validate(() => {})
-      })
+    created () {
+        this.defaultForm = JSON.parse(JSON.stringify(this.formDef))
     },
-    /**
-     * 获取表单数据
-     */
-    getFormData() {
-      if (this.$utils.isEmpty(this.formId)) {
-        // 重置表单
-        this.formDef = JSON.parse(JSON.stringify(this.defaultForm))
-        this.formDef.typeId = this.typeId
-        this.formValidate()
-        return
-      }
-      this.dialogLoading = true
+    methods: {
+        changeMode () {
+            this.formDef.code = ''
+            this.formDef.busId = ''
+        },
+        handleCodeDef (data) {
+            this.formDef.busId = data.id
+        },
+        // 下一步
+        handleNext () {
+            this.$refs[this.formName].validate(valid => {
+                if (valid) {
+                    this.nextData()
+                } else {
+                    ActionUtils.saveErrorMessage()
+                }
+            })
+        },
+        // 下一步数据
+        nextData () {
+            if (this.formDef.buildMode === 'default') {
+                this.design()
+            } else {
+                // TODO: 其他表单模版类型处理
+            }
+        },
+        design (template) {
+            this.formDefData = this.formDef
+            this.formbuilderDialogVisible = true
+            this.closeDialog()
+        },
+        // 关闭当前窗口
+        closeDialog () {
+            this.$emit('close', false)
+        },
+        /**
+         * 表单验证
+         */
+        formValidate () {
+            this.$nextTick(() => {
+                this.$refs[this.formName].validate(() => {})
+            })
+        },
+        /**
+         * 获取表单数据
+         */
+        getFormData () {
+            if (this.$utils.isEmpty(this.formId)) {
+                // 重置表单
+                this.formDef = JSON.parse(JSON.stringify(this.defaultForm))
+                this.formDef.typeId = this.typeId
+                this.formValidate()
+                return
+            }
+            this.dialogLoading = true
+        }
     }
-  }
 
 }
 </script>
 <style lang="scss">
 .form-def-create-dialog{
-  .el-dialog__body{
-    height:  calc(75vh - 150px) !important;
-  }
+    .el-dialog__body{
+        height:  calc(75vh - 150px) !important;
+    }
 }
 </style>

+ 2 - 1
src/views/platform/office/bpmInitiatedProcess/myRequest.vue

@@ -10,6 +10,8 @@
                 @expand-collapse="handleExpandCollapse"
             />
         </div>
+        <!-- :row-handle="listConfig.rowHandle" -->
+        <!-- 隐藏操作列 -->
         <ibps-crud
             ref="crud"
             :height="height"
@@ -19,7 +21,6 @@
             :search-form="listConfig.searchForm"
             :pk-key="pkKey"
             :columns="listConfig.columns"
-            :row-handle="listConfig.rowHandle"
             :pagination="pagination"
             :loading="loading"
             :selection-row="false"

+ 10 - 4
src/views/platform/org/employee/change-password.vue

@@ -215,10 +215,16 @@ export default {
          * 还原默认
          */
         restoreDefault () {
-            this.password.newPassword = '123456'
-            this.password.repeatPassword = '123456'
-            this.restoreDefaultPassW = 'restoreDefault'
-            this.saveData()
+            this.$confirm(`将重置用户密码为【123456】,是否确认操作?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.password.newPassword = '123456'
+                this.password.repeatPassword = '123456'
+                this.restoreDefaultPassW = 'restoreDefault'
+                this.saveData()
+            }).catch(() => {})
         },
         // 关闭当前窗口
         closeDialog () {