Explorar o código

Merge branch 'master' of http://119.23.210.103:3000/wy/zdqy_firm_former

liujiayin %!s(int64=2) %!d(string=hai) anos
pai
achega
42e82f7c5d

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1214 - 1205
src/business/platform/form/constants/fieldTypes.js


+ 454 - 448
src/business/platform/form/formbuilder/form-main/widget-form-field.vue

@@ -1,340 +1,346 @@
 <template>
-  <div>
-    <!-- 单行文本-->
-    <el-input
-      v-if="fieldType === 'text'"
-      :value="defaultValue"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!--多行文本-->
-    <el-input
-      v-else-if="fieldType === 'textarea'"
-      :value="defaultValue"
-      type="textarea"
-      :rows="fieldOptions.rows||5"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 数字 -->
-    <el-input
-      v-else-if="fieldType === 'number'"
-      :value="defaultValue"
-      type="number"
-      :controls-position="fieldOptions.controls_position"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 计数器 -->
-    <el-input-number
-      v-else-if="fieldType === 'inputNumber'"
-      :value="defaultValue"
-      :max="fieldOptions.max"
-      :min="fieldOptions.min"
-      :step="fieldOptions.step"
-      :controls="fieldOptions.controls"
-      :controls-position="fieldOptions.controls_position"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
+    <div>
+        <!-- 单行文本-->
+        <el-input
+            v-if="fieldType === 'text'"
+            :value="defaultValue"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!--多行文本-->
+        <el-input
+            v-else-if="fieldType === 'textarea'"
+            :value="defaultValue"
+            type="textarea"
+            :rows="fieldOptions.rows||5"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 数字 -->
+        <el-input
+            v-else-if="fieldType === 'number'"
+            :value="defaultValue"
+            type="number"
+            :controls-position="fieldOptions.controls_position"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 计数器 -->
+        <el-input-number
+            v-else-if="fieldType === 'inputNumber'"
+            :value="defaultValue"
+            :max="fieldOptions.max"
+            :min="fieldOptions.min"
+            :step="fieldOptions.step"
+            :controls="fieldOptions.controls"
+            :controls-position="fieldOptions.controls_position"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
 
-    <!-- 单选 -->
-    <el-radio-group
-      v-else-if="fieldType === 'radio'"
-      :value="defaultValue"
-      disabled
-    >
-      <component
-        :is="fieldOptions.button?'el-radio-button':'el-radio'"
-        v-for="(o, i) in options"
-        :key="o.val+i"
-        :label="i"
-        :border="fieldOptions.border"
-        :style="{
-          marginTop: '5px',
-          display: fieldOptions.arrangement==='vertical' ? 'block' : null}"
-      >
-        {{ o.label }}
-      </component>
-    </el-radio-group>
-    <!-- 多选 -->
-    <el-checkbox-group
-      v-else-if="fieldType === 'checkbox'"
-      :value="defaultValue"
-      disabled
-    >
-      <component
-        :is="fieldOptions.button?'el-checkbox-button':'el-checkbox'"
-        v-for="(o,i) in options"
-        :key="o.val+i"
-        :label="i"
-        :border="fieldOptions.border"
-        :style="{ display: fieldOptions.arrangement==='vertical' ? 'block' : null}"
-        disabled
-      > {{ o.label }}
-      </component>
-    </el-checkbox-group>
-    <!-- 下拉 -->
-    <el-select
-      v-else-if="fieldType === 'select'"
-      :value="defaultValue"
-      :multiple="fieldOptions.multiple"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    >
-      <el-option
-        v-for="(o ,i) in fieldOptions.options"
-        :key="o.val+i"
-        :value="o.val"
-        :label="o.label"
-        disabled
-      />
-    </el-select>
-    <!-- 日期控件 || 当前日期 || 当前时间 -->
-    <el-date-picker
-      v-else-if="fieldType === 'datePicker'||fieldType === 'currentTime'||fieldType === 'currentDate'"
-      :value="defaultValue"
-      :type="fieldOptions.subtype||'date'"
-      :value-format="fieldOptions.valueFormat"
-      :format="fieldOptions.viewFormat||fieldOptions.valueFormat"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 开关 -->
-    <template v-else-if="fieldType == 'switch'">
-      <el-checkbox
-        v-if="fieldOptions.appearance==='checkbox'"
-        :value="defaultValue"
-        disabled
-      />
-      <el-switch
-        v-else
-        :value="defaultValue"
-        :width="fieldOptions.width"
-        :active-value="fieldOptions.active_value"
-        :inactive-value="fieldOptions.inactive_value"
-        :active-text="fieldOptions.active_text"
-        :inactive-text="fieldOptions.inactive_text"
-        :active-color="fieldOptions.active_color"
-        :inactive-color="fieldOptions.inactive_color"
-        disabled
-      />
-    </template>
+        <!-- 单选 -->
+        <el-radio-group
+            v-else-if="fieldType === 'radio'"
+            :value="defaultValue"
+            disabled
+        >
+            <component
+                :is="fieldOptions.button?'el-radio-button':'el-radio'"
+                v-for="(o, i) in options"
+                :key="o.val+i"
+                :label="i"
+                :border="fieldOptions.border"
+                :style="{marginTop: '5px', display: fieldOptions.arrangement==='vertical' ? 'block' : null}"
+            >
+                {{ o.label }}
+            </component>
+        </el-radio-group>
+        <!-- 多选 -->
+        <el-checkbox-group
+            v-else-if="fieldType === 'checkbox'"
+            :value="defaultValue"
+            disabled
+        >
+            <component
+                :is="fieldOptions.button?'el-checkbox-button':'el-checkbox'"
+                v-for="(o,i) in options"
+                :key="o.val+i"
+                :label="i"
+                :border="fieldOptions.border"
+                :style="{ display: fieldOptions.arrangement==='vertical' ? 'block' : null}"
+                disabled
+            > {{ o.label }}
+            </component>
+        </el-checkbox-group>
+        <!-- 下拉 -->
+        <el-select
+            v-else-if="fieldType === 'select'"
+            :value="defaultValue"
+            :multiple="fieldOptions.multiple"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        >
+            <el-option
+                v-for="(o ,i) in fieldOptions.options"
+                :key="o.val+i"
+                :value="o.val"
+                :label="o.label"
+                disabled
+            />
+        </el-select>
+        <!-- 日期控件 || 当前日期 || 当前时间 -->
+        <el-date-picker
+            v-else-if="fieldType === 'datePicker'||fieldType === 'currentTime'||fieldType === 'currentDate'"
+            :value="defaultValue"
+            :type="fieldOptions.subtype||'date'"
+            :value-format="fieldOptions.valueFormat"
+            :format="fieldOptions.viewFormat||fieldOptions.valueFormat"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 开关 -->
+        <template v-else-if="fieldType == 'switch'">
+            <el-checkbox
+                v-if="fieldOptions.appearance==='checkbox'"
+                :value="defaultValue"
+                disabled
+            />
+            <el-switch
+                v-else
+                :value="defaultValue"
+                :width="fieldOptions.width"
+                :active-value="fieldOptions.active_value"
+                :inactive-value="fieldOptions.inactive_value"
+                :active-text="fieldOptions.active_text"
+                :inactive-text="fieldOptions.inactive_text"
+                :active-color="fieldOptions.active_color"
+                :inactive-color="fieldOptions.inactive_color"
+                disabled
+            />
+        </template>
 
-    <!-- 滑块 -->
-    <template v-else-if="fieldType === 'slider'">
-      <el-slider
-        :value="defaultValue"
-        :max="fieldOptions.max"
-        :min="fieldOptions.min"
-        :step="fieldOptions.step"
-        :show-input="fieldOptions.show_input"
-        disabled
-      />
-    </template>
-    <!-- 评分-->
-    <template v-else-if="fieldType === 'rate'">
-      <el-rate
-        :value="defaultValue"
-        :max="fieldOptions.max"
-        :allow-half="fieldOptions.allow_half"
-        :show-text="fieldOptions.show_text"
-        :show-score="fieldOptions.show_score"
-        disabled
-      />
-    </template>
-    <!-- 隐藏域 -->
-    <template v-else-if="fieldType === 'hidden'">
-      <el-input
-        :value="defaultValue"
-        disabled
-      >
-        <i slot="prefix" class="ibps-icon-eye-slash red" />
-      </el-input>
-    </template>
-    <!-- =======================增强字段==============================-->
-    <!--富文本框-->
-    <template v-else-if="fieldType === 'editor'">
-      <ibps-ueditor
-        :value="defaultValue"
-        :config="ueditorConfig"
-        :z-index="2000"
-        destroy
-        readonly
-        disabled
-        @click="()=>{$emit('click')}"
-      />
-    </template>
-    <!--数据字典-->
-    <ibps-dictionary
-      v-else-if="fieldType==='dictionary'"
-      :value="defaultValue"
-      :type-key="fieldOptions.dictionary"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 自动编号-->
-    <el-input
-      v-else-if="fieldType==='autoNumber'"
-      :value="defaultValue"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      prefix-icon="ibps-icon-list-ol"
-      disabled
-    />
-    <!-- 上传附件-->
-    <ibps-attachment
-      v-else-if="fieldType==='attachment'"
-      :value="defaultValue"
-      :placeholder="fieldOptions.placeholder"
-      :multiple="fieldOptions.multiple"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 选择器-->
-    <ibps-user-selector
-      v-else-if="fieldType==='selector'"
-      :value="defaultValue"
-      store="id"
-      :placeholder="$utils.isNotEmpty(fieldOptions.placeholder)? fieldOptions.placeholder:'请选择'"
-      :style="{width:width}"
-      disabled-icon
-      disabled
-      show-placeholder
-    />
-    <!-- 自定义对话框-->
-    <el-input
-      v-else-if="fieldType==='customDialog'"
-      :value="''"
-      :placeholder="fieldOptions.placeholder"
-      :prefix-icon="icon"
-      :style="{width:width}"
-      type="text"
-      disabled
-    />
-    <!-- 关联数据-->
-    <el-select
-      v-else-if="fieldType==='linkdata'"
-      :value="''"
-      :placeholder="fieldOptions.placeholder"
-      :style="{width:width}"
-      disabled
-    />
-    <!-- 地址-->
-    <div
-      v-else-if="fieldType==='address'"
-    >
-      <ibps-address
-        :value="defaultValue"
-        :size="fieldOptions.size"
-        :top-val="topVal||'0'"
-        :top="fieldOptions.top || 'country'"
-        :level="fieldOptions.level||'district'"
-        data-type="code"
-        :style="{width:width}"
-        disabled
-      />
-      <el-input
-        v-if="fieldOptions.is_street"
-        v-model="fieldOptions.stree"
-        placeholder="详细地址"
-        :style="{width:width}"
-        disabled
-      />
-    </div>
-    <!-- 签名-->
-    <div
-      v-else-if="fieldType==='signature'"
-      class="fr-signature-outer"
-    >
-      <div class="fr-signature-header">
-        <div class="fr-signature-label">{{ fieldOptions.placeholder }}</div>
-        <div class="fr-signature-toolbar">
-          <a href="javascript:void(0);" data-toggle="signature-clear">清除</a>
+        <!-- 滑块 -->
+        <template v-else-if="fieldType === 'slider'">
+            <el-slider
+                :value="defaultValue"
+                :max="fieldOptions.max"
+                :min="fieldOptions.min"
+                :step="fieldOptions.step"
+                :show-input="fieldOptions.show_input"
+                disabled
+            />
+        </template>
+        <!-- 评分-->
+        <template v-else-if="fieldType === 'rate'">
+            <el-rate
+                :value="defaultValue"
+                :max="fieldOptions.max"
+                :allow-half="fieldOptions.allow_half"
+                :show-text="fieldOptions.show_text"
+                :show-score="fieldOptions.show_score"
+                disabled
+            />
+        </template>
+        <!-- 隐藏域 -->
+        <template v-else-if="fieldType === 'hidden'">
+            <el-input
+                :value="defaultValue"
+                disabled
+            >
+                <i slot="prefix" class="ibps-icon-eye-slash red" />
+            </el-input>
+        </template>
+        <!-- =======================增强字段==============================-->
+        <!--富文本框-->
+        <template v-else-if="fieldType === 'editor'">
+            <ibps-ueditor
+                :value="defaultValue"
+                :config="ueditorConfig"
+                :z-index="2000"
+                destroy
+                readonly
+                disabled
+                @click="()=>{$emit('click')}"
+            />
+        </template>
+        <!--数据字典-->
+        <ibps-dictionary
+            v-else-if="fieldType==='dictionary'"
+            :value="defaultValue"
+            :type-key="fieldOptions.dictionary"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 自动编号-->
+        <el-input
+            v-else-if="fieldType==='autoNumber'"
+            :value="defaultValue"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            prefix-icon="ibps-icon-list-ol"
+            disabled
+        />
+        <!-- 上传附件-->
+        <ibps-attachment
+            v-else-if="fieldType==='attachment'"
+            :value="defaultValue"
+            :placeholder="fieldOptions.placeholder"
+            :multiple="fieldOptions.multiple"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 选择器-->
+        <ibps-user-selector
+            v-else-if="fieldType==='selector'"
+            :value="defaultValue"
+            store="id"
+            :placeholder="$utils.isNotEmpty(fieldOptions.placeholder)? fieldOptions.placeholder:'请选择'"
+            :style="{width:width}"
+            disabled-icon
+            disabled
+            show-placeholder
+        />
+        <!-- 自定义对话框-->
+        <el-input
+            v-else-if="fieldType==='customDialog'"
+            :value="''"
+            :placeholder="fieldOptions.placeholder"
+            :prefix-icon="icon"
+            :style="{width:width}"
+            type="text"
+            disabled
+        />
+        <!-- 关联数据-->
+        <el-select
+            v-else-if="fieldType==='linkdata'"
+            :value="''"
+            :placeholder="fieldOptions.placeholder"
+            :style="{width:width}"
+            disabled
+        />
+        <!-- 地址-->
+        <div
+            v-else-if="fieldType==='address'"
+        >
+            <ibps-address
+                :value="defaultValue"
+                :size="fieldOptions.size"
+                :top-val="topVal||'0'"
+                :top="fieldOptions.top || 'country'"
+                :level="fieldOptions.level||'district'"
+                data-type="code"
+                :style="{width:width}"
+                disabled
+            />
+            <el-input
+                v-if="fieldOptions.is_street"
+                v-model="fieldOptions.stree"
+                placeholder="详细地址"
+                :style="{width:width}"
+                disabled
+            />
         </div>
-      </div>
-      <div class="fr-signature-div" />
-    </div>
-    <!-- 图片控件 -->
-    <ibps-image
-      v-else-if="fieldType==='image'"
-      is-builder
-      :value="defaultValue"
-      :width="fieldOptions.width"
-      :height="fieldOptions.height"
-      :limit="fieldOptions.limit"
-      :accept="fieldOptions.accept"
-      :tip="fieldOptions.tip"
-      :size="fieldOptions.size"
-      :upload-type="fieldOptions.uploadType"
-    />
-    <!-- =======================系统字段==============================-->
-    <!-- 当前用户-->
-    <ibps-user-selector
-      v-else-if="fieldType==='currentUser'"
-      :placeholder="'自动获取当前用户'"
-      disabled-icon
-      disabled
-      show-placeholder
-    />
-    <!-- 当前组织-->
-    <ibps-user-selector
-      v-else-if="fieldType==='currentOrg'"
-      :placeholder="'自动获取当前组织'"
-      disabled-icon
-      disabled
-      show-placeholder
-    />
-    <!-- =======================流程字段==============================-->
-    <!-- 流程实例 -->
-    <ibps-bpm-inst-his
-      v-else-if="fieldType==='bpmInstHis'"
-      :placeholder="$utils.isNotEmpty(fieldOptions.placeholder)? fieldOptions.placeholder:'请选择'"
-      disabled
-    />
+        <!-- 签名-->
+        <div
+            v-else-if="fieldType==='signature'"
+            class="fr-signature-outer"
+        >
+            <div class="fr-signature-header">
+                <div class="fr-signature-label">{{ fieldOptions.placeholder }}</div>
+                <div class="fr-signature-toolbar">
+                    <a href="javascript:void(0);" data-toggle="signature-clear">清除</a>
+                </div>
+            </div>
+            <div class="fr-signature-div" />
+        </div>
+        <!-- 图片控件 -->
+        <ibps-image
+            v-else-if="fieldType==='image'"
+            is-builder
+            :value="defaultValue"
+            :width="fieldOptions.width"
+            :height="fieldOptions.height"
+            :limit="fieldOptions.limit"
+            :accept="fieldOptions.accept"
+            :tip="fieldOptions.tip"
+            :size="fieldOptions.size"
+            :upload-type="fieldOptions.uploadType"
+        />
+        <!-- =======================系统字段==============================-->
+        <!-- 当前层级 -->
+        <ibps-user-selector
+            v-else-if="fieldType==='currentPosition'"
+            :placeholder="'自动获取当前层级'"
+            disabled-icon
+            disabled
+            show-placeholder
+        />
+        <!-- 当前用户-->
+        <ibps-user-selector
+            v-else-if="fieldType==='currentUser'"
+            :placeholder="'自动获取当前用户'"
+            disabled-icon
+            disabled
+            show-placeholder
+        />
+        <!-- 当前组织-->
+        <ibps-user-selector
+            v-else-if="fieldType==='currentOrg'"
+            :placeholder="'自动获取当前组织'"
+            disabled-icon
+            disabled
+            show-placeholder
+        />
+        <!-- =======================流程字段==============================-->
+        <!-- 流程实例 -->
+        <ibps-bpm-inst-his
+            v-else-if="fieldType==='bpmInstHis'"
+            :placeholder="$utils.isNotEmpty(fieldOptions.placeholder)? fieldOptions.placeholder:'请选择'"
+            disabled
+        />
 
-    <!-- 审批意见-->
-    <approval-opinion
-      v-else-if="fieldType==='approval_opinion'"
-      :enable-common="fieldOptions.common_statment"
-      disabled
-    />
-    <!-- =======================自定义控件==============================-->
-    <!-- 自定义组件-->
-    <div v-else-if="fieldType==='component'">
-      <template v-if="$utils.isNotEmpty(element.label)"> [{{ element.label }}]</template>自定义组件
-    </div>
-    <!-- 自定义控件-->
-    <div v-else-if="fieldType==='control'">
-      <template v-if="$utils.isNotEmpty(element.label)"> [{{ element.label }}]</template>自定义控件
-    </div>
-    <!-- =======================其它字段==============================-->
-    <!-- 文本-->
-    <span v-else-if="fieldType==='label'">
-      {{ field.value|| '用于展示文本或者公式计算的值,且数据不会保存' }}
-    </span>
-    <!-- 链接-->
-    <ibps-link
-      v-else-if="fieldType==='hyperlink'"
-      text="链接"
-      :link="fieldOptions.link"
-      :show-type="fieldOptions.showType"
-      :text-type="fieldOptions.textType"
-      :link-type="fieldOptions.linkType"
-      :type="fieldOptions.type"
-      :icon="fieldOptions.icon?'ibps-icon-'+fieldOptions.icon:''"
-    />
+        <!-- 审批意见-->
+        <approval-opinion
+            v-else-if="fieldType==='approval_opinion'"
+            :enable-common="fieldOptions.common_statment"
+            disabled
+        />
+        <!-- =======================自定义控件==============================-->
+        <!-- 自定义组件-->
+        <div v-else-if="fieldType==='component'">
+            <template v-if="$utils.isNotEmpty(element.label)"> [{{ element.label }}]</template>自定义组件
+        </div>
+        <!-- 自定义控件-->
+        <div v-else-if="fieldType==='control'">
+            <template v-if="$utils.isNotEmpty(element.label)"> [{{ element.label }}]</template>自定义控件
+        </div>
+        <!-- =======================其它字段==============================-->
+        <!-- 文本-->
+        <span v-else-if="fieldType==='label'">
+            {{ field.value|| '用于展示文本或者公式计算的值,且数据不会保存' }}
+        </span>
+        <!-- 链接-->
+        <ibps-link
+            v-else-if="fieldType==='hyperlink'"
+            text="链接"
+            :link="fieldOptions.link"
+            :show-type="fieldOptions.showType"
+            :text-type="fieldOptions.textType"
+            :link-type="fieldOptions.linkType"
+            :type="fieldOptions.type"
+            :icon="fieldOptions.icon?'ibps-icon-'+fieldOptions.icon:''"
+        />
 
-    <span v-else>未知控件类型</span>
+        <span v-else>未知控件类型</span>
 
-  </div>
+    </div>
 </template>
 <script>
 import IbpsUeditor from '@/components/ibps-ueditor'
@@ -348,135 +354,135 @@ import ApprovalOpinion from '@/business/platform/bpmn/components/approval-opinio
 import IbpsBpmInstHis from '@/business/platform/bpmn/components/bpm-inst-his'
 
 export default {
-  components: {
-    IbpsUeditor,
-    IbpsDictionary,
-    IbpsAttachment,
-    IbpsImage,
-    IbpsUserSelector,
-    IbpsAddress,
-    IbpsLink,
-    ApprovalOpinion,
-    IbpsBpmInstHis
-  },
-  props: {
-    element: Object
-  },
-  data() {
-    return {
-      field: this.element,
-      ajaxOptions: [{
-        value: '0',
-        label: '动态获取'
-      }]
-    }
-  },
-  computed: {
-    fieldType() {
-      return this.field.field_type
+    components: {
+        IbpsUeditor,
+        IbpsDictionary,
+        IbpsAttachment,
+        IbpsImage,
+        IbpsUserSelector,
+        IbpsAddress,
+        IbpsLink,
+        ApprovalOpinion,
+        IbpsBpmInstHis
     },
-    fieldOptions() {
-      return this.field.field_options || {}
+    props: {
+        element: Object
     },
-    width() {
-      return this.fieldOptions.is_width ? (this.fieldOptions.width || 100) + (this.fieldOptions.width_unit || '%') : '100%'
-    },
-    options() {
-      if (this.field.field_options.datasource === 'valuesource') {
-        return this.ajaxOptions
-      } else {
-        return this.field.field_options.options
-      }
+    data () {
+        return {
+            field: this.element,
+            ajaxOptions: [{
+                value: '0',
+                label: '动态获取'
+            }]
+        }
     },
-    defaultValue() {
-      if (this.field.field_options.default_value_type === 'fixed') {
-        if (this.fieldType === 'radio' || this.fieldType === 'checkbox') {
-          const defaultValue = []
-          this.options.forEach((option, i) => {
-            if (option.checked === true) {
-              defaultValue.push(i)
+    computed: {
+        fieldType () {
+            return this.field.field_type
+        },
+        fieldOptions () {
+            return this.field.field_options || {}
+        },
+        width () {
+            return this.fieldOptions.is_width ? (this.fieldOptions.width || 100) + (this.fieldOptions.width_unit || '%') : '100%'
+        },
+        options () {
+            if (this.field.field_options.datasource === 'valuesource') {
+                return this.ajaxOptions
+            } else {
+                return this.field.field_options.options
             }
-          })
+        },
+        defaultValue () {
+            if (this.field.field_options.default_value_type === 'fixed') {
+                if (this.fieldType === 'radio' || this.fieldType === 'checkbox') {
+                    const defaultValue = []
+                    this.options.forEach((option, i) => {
+                        if (option.checked === true) {
+                            defaultValue.push(i)
+                        }
+                    })
+
+                    if (this.fieldType !== 'checkbox') {
+                        return defaultValue.length > 0 ? defaultValue[0] : void 0
+                    }
+                    return defaultValue
+                } else if (this.fieldType === 'select') {
+                    const defaultValue = []
+                    this.options.forEach((option, i) => {
+                        if (option.checked === true) {
+                            defaultValue.push(option.label)
+                        }
+                    })
 
-          if (this.fieldType !== 'checkbox') {
-            return defaultValue.length > 0 ? defaultValue[0] : void 0
-          }
-          return defaultValue
-        } else if (this.fieldType === 'select') {
-          const defaultValue = []
-          this.options.forEach((option, i) => {
-            if (option.checked === true) {
-              defaultValue.push(option.label)
+                    if (this.fieldOptions.multiple) {
+                        return defaultValue
+                    } else {
+                        return defaultValue.length > 0 ? defaultValue[0] : void 0
+                    }
+                } else if (this.fieldType === 'inputNumber') {
+                    const value = this.field.field_options.default_value
+                    if (!this.$utils.isValidNumber(value)) { return void 0 }
+                    return Number(value)
+                } else if (this.fieldType === 'selector') {
+                    return void 0
+                } else {
+                    return this.field.field_options.default_value
+                }
+            } else {
+                return void 0
+            }
+        },
+        autosize () {
+            let autosize = this.field.field_options.autosize
+            if (this.field.field_options.autosize && (this.field.field_options.min_rows || this.field.field_options.max_rows)) {
+                const row = {}
+                row.minRows = this.field.field_options.min_rows ? this.field.field_options.min_rows : null
+                row.maxRows = this.field.field_options.max_rows ? this.field.field_options.max_rows : null
+                autosize = row
+            }
+            return autosize
+        },
+        ueditorConfig () {
+            const config = {
+                initialContent: this.field.field_options.placeholder,
+                toolbars: []
             }
-          })
 
-          if (this.fieldOptions.multiple) {
-            return defaultValue
-          } else {
-            return defaultValue.length > 0 ? defaultValue[0] : void 0
-          }
-        } else if (this.fieldType === 'inputNumber') {
-          const value = this.field.field_options.default_value
-          if (!this.$utils.isValidNumber(value)) { return void 0 }
-          return Number(value)
-        } else if (this.fieldType === 'selector') {
-          return void 0
-        } else {
-          return this.field.field_options.default_value
+            const toolbars = this.field.field_options.toolbars
+            if (toolbars && toolbars.length > 0) {
+                config.toolbars.push(toolbars)
+            }
+            return config
+        },
+        icon () {
+            return 'ibps-icon-' + (this.field.field_options.icon || 'search')
+        },
+        topVal () {
+            if (this.field.field_options.top === 'country') {
+                return '0'
+            }
+            if (this.field.field_options.topval) {
+                return this.field.field_options.topval[this.field.field_options.topval.length - 1]
+            } else {
+                return void 0
+            }
         }
-      } else {
-        return void 0
-      }
-    },
-    autosize() {
-      let autosize = this.field.field_options.autosize
-      if (this.field.field_options.autosize && (this.field.field_options.min_rows || this.field.field_options.max_rows)) {
-        const row = {}
-        row.minRows = this.field.field_options.min_rows ? this.field.field_options.min_rows : null
-        row.maxRows = this.field.field_options.max_rows ? this.field.field_options.max_rows : null
-        autosize = row
-      }
-      return autosize
     },
-    ueditorConfig() {
-      const config = {
-        initialContent: this.field.field_options.placeholder,
-        toolbars: []
-      }
-
-      const toolbars = this.field.field_options.toolbars
-      if (toolbars && toolbars.length > 0) {
-        config.toolbars.push(toolbars)
-      }
-      return config
-    },
-    icon() {
-      return 'ibps-icon-' + (this.field.field_options.icon || 'search')
+    watch: {
+        element: {
+            handler (val) {
+                this.field = val
+            },
+            deep: true
+        }
     },
-    topVal() {
-      if (this.field.field_options.top === 'country') {
-        return '0'
-      }
-      if (this.field.field_options.topval) {
-        return this.field.field_options.topval[this.field.field_options.topval.length - 1]
-      } else {
-        return void 0
-      }
-    }
-  },
-  watch: {
-    element: {
-      handler(val) {
-        this.field = val
-      },
-      deep: true
-    }
-  },
-  methods: {
-    getInstHis(data) {
-      this.instHisTableData = JSON.parse(JSON.stringify(data))
+    methods: {
+        getInstHis (data) {
+            this.instHisTableData = JSON.parse(JSON.stringify(data))
+        }
     }
-  }
 }
 </script>
 

+ 37 - 0
src/business/platform/form/formbuilder/right-aside/field-types/ibps-field-current-position.vue

@@ -0,0 +1,37 @@
+<template>
+  <div>
+    <el-form v-bind="$attrs" v-on="$listeners" @submit.native.prevent>
+      <!-- 基本属性 -->
+      <editor-base
+        :field-item="fieldItem"
+        :bo-data="boData"
+        :fields="fields"
+        types="switchFieldType,label,name,desc,display"
+      />
+      <!-- 参数设置 -->
+      <editor-field-selector
+        :field-item="fieldItem"
+        types="store"
+      />
+      <!-- 字段权限 -->
+      <editor-rights
+        :field-item="fieldItem"
+        types="hide"
+      />
+      <!-- 布局设置 -->
+      <editor-layout
+        :field-item="fieldItem"
+        types="hideLabel,labelWidth,width,customClass,mobile"
+      />
+    </el-form>
+  </div>
+
+</template>
+<script>
+import typeMixin from '../mixins/type'
+
+export default {
+  name: 'ibps-field-current-position',
+  mixins: [typeMixin]
+}
+</script>

+ 2 - 0
src/business/platform/form/formbuilder/right-aside/field-types/index.js

@@ -31,6 +31,7 @@ import IbpsFieldAddress from './ibps-field-address'
 import IbpsFieldSignature from './ibps-field-signature'
 import IbpsFieldImage from './ibps-field-image'
 // ===============系统组件===================
+import IbpsFieldCurrentPosition from './ibps-field-current-position'
 import IbpsFieldCurrentUser from './ibps-field-current-user'
 import IbpsFieldCurrentOrg from './ibps-field-current-org'
 import IbpsFieldCurrentTime from './ibps-field-current-time'
@@ -86,6 +87,7 @@ export default {
   IbpsFieldSignature,
   IbpsFieldImage,
 
+  IbpsFieldCurrentPosition,
   IbpsFieldCurrentUser,
   IbpsFieldCurrentOrg,
   IbpsFieldCurrentTime,

+ 2 - 2
src/business/platform/form/formbuilder/utils/generateCode.js

@@ -940,7 +940,7 @@ function generateFieldTemplate(field, prop) {
     setSentences(sentence, component)
 
   // 选择器
-  } else if (fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg') {
+  } else if (fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition') {
     template = `
       <ibps-user-selector
         v-model="models.${prop}"
@@ -949,7 +949,7 @@ function generateFieldTemplate(field, prop) {
         ${Utils.isNotEmpty(fieldOptions.filter) ? `filter="${fieldOptions.filter}"` : ''}
         :multiple="${Utils.isNotEmpty(fieldOptions.multiple) ? fieldOptions.multiple : false}"
         store="${fieldOptions.store || 'id'}"
-        :disabled="${(fieldType === 'currentUser' || fieldType === 'currentOrg') ? true : 'readonly'}"
+        :disabled="${(fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition') ? true : 'readonly'}"
         :readonly-text="readonlyText?'text':null"
         :style="{width:width}"
       />

+ 3 - 3
src/business/platform/form/formrender/dynamic-form/dynamic-form-field.vue

@@ -374,9 +374,9 @@
             v-on="$listeners"
         />
         <!-- 选择器-->
-        <div v-else-if="(fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg') && readonlyText && !dataModel" :class="isTable ? '' : 'ibps-field-text-no'">/</div>
+        <div v-else-if="(fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition') && readonlyText && !dataModel" :class="isTable ? '' : 'ibps-field-text-no'">/</div>
         <ibps-user-selector
-            v-else-if="fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg'"
+            v-else-if="fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition'"
             :class="isTable ? '' : readonlyText ? 'ibps-field-text' : ''"
             v-model="dataModel"
             :placeholder="selectPlaceholder"
@@ -384,7 +384,7 @@
             :filter="fieldOptions.filter"
             :multiple="multiple"
             :store="fieldOptions.store || 'id'"
-            :disabled="fieldType === 'currentUser' || fieldType === 'currentOrg' ? true : readonly"
+            :disabled="fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition' ? true : readonly"
             :readonly-text="readonlyText ? 'text' : null"
             :style="{ width: width }"
             @change-link-data="handleSeletorLinkageData"

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

@@ -102,7 +102,6 @@ export default {
             this.isShow = false
         },
         openDataTemplateParamDialog (form, { type }) {
-            this.$store.commit('ibps/param/jianCeDuiXiangIdSet', { jianCeDuiXiangId: form.getData('jianCeDuiXiangId') })
             // 弹窗打开
             /*
             templateStatis: () => import ('@/views/statistics/index.vue')

+ 943 - 932
src/business/platform/form/utils/formUtil.js

@@ -19,971 +19,982 @@ import store from '@/store' // store
 window.FormulaUtil = FormulaUtil
 window.Utils = Utils
 const FormUtil = {
-  TABLE_SEPARATOR: '.', // 表分隔符
-  EVAL_FORMULA: '',
-  NOT_NEED_FIELD: '#not_need_field#', // 不需要通过字段计算的字段
-  CACHE_DYNAMIC_VALUE: {},
-  CACHE_CURRENT_USER_DATA: {}, // 缓存的用户数据值,包含组织、岗位部门,以后缓存到store 或者缓存
-  setResponseFormula(responseFormula, model, code) {
-    if (model.field_type === 'table') { //  判断是否是主表,子表他自己处理
-      const columns = model.field_options.columns
-      if (columns && columns.length > 0) {
-        model.field_options.columns.forEach((item) => {
-          this.setChangeFormulaData(responseFormula, item, model.name)
-        })
-      }
-    } else { // 主表
-      this.setChangeFormulaData(responseFormula, model, code)
-    }
-  },
+    TABLE_SEPARATOR: '.', // 表分隔符
+    EVAL_FORMULA: '',
+    NOT_NEED_FIELD: '#not_need_field#', // 不需要通过字段计算的字段
+    CACHE_DYNAMIC_VALUE: {},
+    CACHE_CURRENT_USER_DATA: {}, // 缓存的用户数据值,包含组织、岗位部门,以后缓存到store 或者缓存
+    setResponseFormula (responseFormula, model, code) {
+        if (model.field_type === 'table') { //  判断是否是主表,子表他自己处理
+            const columns = model.field_options.columns
+            if (columns && columns.length > 0) {
+                model.field_options.columns.forEach((item) => {
+                    this.setChangeFormulaData(responseFormula, item, model.name)
+                })
+            }
+        } else { // 主表
+            this.setChangeFormulaData(responseFormula, model, code)
+        }
+    },
 
-  setChangeFormulaData(responseFormula, model, code) {
-    const fieldOptions = model.field_options
-    if (Utils.isEmpty(fieldOptions)) {
-      return {}
-    }
-    const formula = fieldOptions.default_value
-    if (fieldOptions.default_value_type !== 'formula' || !formula) {
-      return {}
-    }
-    const changename = code + this.TABLE_SEPARATOR + model.name
-    // eslint-disable-next-line no-useless-escape
-    const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
-    const z = this.NOT_NEED_FIELD
-    const changFormula = {
-      changename: changename,
-      formula: formula
-    }
-    let isHasField = false
+    setChangeFormulaData (responseFormula, model, code) {
+        const fieldOptions = model.field_options
+        if (Utils.isEmpty(fieldOptions)) {
+            return {}
+        }
+        const formula = fieldOptions.default_value
+        if (fieldOptions.default_value_type !== 'formula' || !formula) {
+            return {}
+        }
+        const changename = code + this.TABLE_SEPARATOR + model.name
+        // eslint-disable-next-line no-useless-escape
+        const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
+        const z = this.NOT_NEED_FIELD
+        const changFormula = {
+            changename: changename,
+            formula: formula
+        }
+        let isHasField = false
 
-    d.forEach(n => {
-      if (/^\$(_widget_)/.test(n)) { // 对字段进行处理
-        const f = n.replace('$_widget_', '').split('#')
-        const g = f[0]
-        const h = f[1]
-        if (Utils.isEmpty(h)) {
-          if (!responseFormula[g]) { responseFormula[g] = [] }
-          responseFormula[g].push(changFormula)
-        }
-        isHasField = true
-      }
-    })
-    // 未有要计算改变字段
-    if (!isHasField) {
-      if (!responseFormula[z]) { responseFormula[z] = [] }
-      responseFormula[z].push(changFormula)
-    }
-  },
-  runCalFormula(self, responseFormulas, curCode, row) {
-    if (Utils.isEmpty(responseFormulas)) { return self.models }
-    responseFormulas.forEach((formula) => {
-      const changename = formula.changename // 修改字段
-      const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
-      const changeCode = changeObj[0]
-      const changeField = changeObj[1] // 修改的字段
-      const formData = JSON.parse(JSON.stringify(self.models))
-      const v = this.getCalFormulaValue(formula, formData, curCode, curCode)
-      if (Utils.isNotEmpty(row)) { // 子表
-        self.setRowData(row, changeField, v)
-      } else {
-        if (curCode === changeCode) {
-          self.setFieldData(changeField, v)
-        } else { // 子表
-          const rowData = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
-          self.setFieldData(changeCode, rowData)
-        }
-      }
-    })
-  },
-  /**
-   * 进行主表公式计算
-   * @param {*} responseFormulas
-   * @param {*} field
-   * @param {*} curCode
-   */
-  runMainCalFormula(self, responseFormulas, curCode) {
-    if (Utils.isEmpty(responseFormulas)) { return }
+        d.forEach(n => {
+            if (/^\$(_widget_)/.test(n)) { // 对字段进行处理
+                const f = n.replace('$_widget_', '').split('#')
+                const g = f[0]
+                const h = f[1]
+                if (Utils.isEmpty(h)) {
+                    if (!responseFormula[g]) { responseFormula[g] = [] }
+                    responseFormula[g].push(changFormula)
+                }
+                isHasField = true
+            }
+        })
+        // 未有要计算改变字段
+        if (!isHasField) {
+            if (!responseFormula[z]) { responseFormula[z] = [] }
+            responseFormula[z].push(changFormula)
+        }
+    },
+    runCalFormula (self, responseFormulas, curCode, row) {
+        if (Utils.isEmpty(responseFormulas)) { return self.models }
+        responseFormulas.forEach((formula) => {
+            const changename = formula.changename // 修改字段
+            const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
+            const changeCode = changeObj[0]
+            const changeField = changeObj[1] // 修改的字段
+            const formData = JSON.parse(JSON.stringify(self.models))
+            const v = this.getCalFormulaValue(formula, formData, curCode, curCode)
+            if (Utils.isNotEmpty(row)) { // 子表
+                self.setRowData(row, changeField, v)
+            } else {
+                if (curCode === changeCode) {
+                    self.setFieldData(changeField, v)
+                } else { // 子表
+                    const rowData = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
+                    self.setFieldData(changeCode, rowData)
+                }
+            }
+        })
+    },
+    /**
+     * 进行主表公式计算
+     * @param {*} responseFormulas
+     * @param {*} field
+     * @param {*} curCode
+     */
+    runMainCalFormula (self, responseFormulas, curCode) {
+        if (Utils.isEmpty(responseFormulas)) { return }
 
-    responseFormulas.forEach((formula) => {
-      const changename = formula.changename // 修改字段
-      const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
-      const changeCode = changeObj[0] || ''// 修改的表
-      const changeField = changeObj[1] || '' // 修改的字段
-      const formData = JSON.parse(JSON.stringify(self.models))
-      if (curCode === changeCode) {
-        const v = this.getCalFormulaValue(formula, formData, curCode, curCode)
-        self.handleModels(changeField, v)
-      } else { // 子表 主表修改子表
-        if (formData[changeCode]) { // 修改其他子表
-          const v = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
-          self.handleModels(changeCode, v)
-        } else { // 修改主表表
-          const v = this.getCalFormulaValue(formula, formData, changeCode, changeCode)
-          if (formData[changeField]) {
-            self.handleModels(changeField, v)
-          }
-        }
-      }
-    })
-  },
-  runSubCalFormula(self, responseFormulas, curCode, mainCode, row) {
-    if (Utils.isEmpty(self.formData)) {
-      return
-    }
-    const formData = JSON.parse(JSON.stringify(self.formData))
-    responseFormulas.forEach((formula) => {
-      const changename = formula.changename // 修改字段
-      const changeObj = changename ? changename.split(FormUtil.TABLE_SEPARATOR) : []// 改变的对象
-      const changeCode = changeObj[0] || ''// 修改的表
-      const changeField = changeObj[1] || '' // 修改的字段
-      // 获取公式计算的值
-      const v = FormUtil.getCalFormulaValue(formula, formData, curCode, mainCode, row)
-      // 回填值
-      if (changeCode === curCode) { // 是否相同子表 则取1列
-        self.handleModels(changeField, v)
-      } else { // 不同表
-        if (mainCode === changeCode) { // 修改是主表
-          self.setFieldData(changeField, v)
-        } else {
-          if (formData[changeCode]) { // 修改其他子表
-            const rowData = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
-            self.setFieldData(changeCode, rowData)
-          } else { // 修改主表表
-            if (formData[changeField]) {
-              self.handleModels(changeField, v)
+        responseFormulas.forEach((formula) => {
+            const changename = formula.changename // 修改字段
+            const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
+            const changeCode = changeObj[0] || ''// 修改的表
+            const changeField = changeObj[1] || '' // 修改的字段
+            const formData = JSON.parse(JSON.stringify(self.models))
+            if (curCode === changeCode) {
+                const v = this.getCalFormulaValue(formula, formData, curCode, curCode)
+                self.handleModels(changeField, v)
+            } else { // 子表 主表修改子表
+                if (formData[changeCode]) { // 修改其他子表
+                    const v = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
+                    self.handleModels(changeCode, v)
+                } else { // 修改主表表
+                    const v = this.getCalFormulaValue(formula, formData, changeCode, changeCode)
+                    if (formData[changeField]) {
+                        self.handleModels(changeField, v)
+                    }
+                }
             }
-          }
-        }
-      }
-    })
-  },
-  getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode) {
-    const rowData = JSON.parse(JSON.stringify(formData[changeCode]))
-    if (Utils.isArray(rowData)) {
-      const res = []
-      for (let i = 0; i < rowData.length; i++) {
-        const row = rowData[i]
-        const obj = {}
-        for (const key in row) {
-          if (row.hasOwnProperty(key)) {
-            let val = row[key]
-            if (key === changeField) {
-              val = this.getCalFormulaValue(formula, formData, changeCode, curCode, i)
+        })
+    },
+    runSubCalFormula (self, responseFormulas, curCode, mainCode, row) {
+        if (Utils.isEmpty(self.formData)) {
+            return
+        }
+        const formData = JSON.parse(JSON.stringify(self.formData))
+        responseFormulas.forEach((formula) => {
+            const changename = formula.changename // 修改字段
+            const changeObj = changename ? changename.split(FormUtil.TABLE_SEPARATOR) : []// 改变的对象
+            const changeCode = changeObj[0] || ''// 修改的表
+            const changeField = changeObj[1] || '' // 修改的字段
+            // 获取公式计算的值
+            const v = FormUtil.getCalFormulaValue(formula, formData, curCode, mainCode, row)
+            // 回填值
+            if (changeCode === curCode) { // 是否相同子表 则取1列
+                self.handleModels(changeField, v)
+            } else { // 不同表
+                if (mainCode === changeCode) { // 修改是主表
+                    self.setFieldData(changeField, v)
+                } else {
+                    if (formData[changeCode]) { // 修改其他子表
+                        const rowData = this.getCalFormulaSubValue(formula, formData, changeField, changeCode, curCode)
+                        self.setFieldData(changeCode, rowData)
+                    } else { // 修改主表表
+                        if (formData[changeField]) {
+                            self.handleModels(changeField, v)
+                        }
+                    }
+                }
             }
-            obj[key] = val
-          }
-        }
-        res.push(obj)
-      }
-      return res
-    } else {
-      // TODO: 一对一
-      if (Utils.isNotEmpty(rowData[changeField])) {
-        rowData[changeField] = this.getCalFormulaValue(formula, formData, changeCode, curCode)
-      }
-      return rowData
-    }
-  },
-  /**
-   * 通过计算的值
-   */
-  getCalFormulaValue(responseFormula, data, curCode, mainCode, row) {
-    const formula = responseFormula.formula
-    const changename = responseFormula.changename// 修改字段
-    const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : [] // 改变的对象
-    const isSameTable = changeObj[0] === curCode // 是否相同的表
-    // eslint-disable-next-line no-useless-escape
-    const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
-    const e = []
-    let v = ''
-    d.forEach(n => {
-      if (/^\$(_widget_)/.test(n)) {
-        const f = n.replace('$_widget_', '').split('#')
-        const g = f[0]
-        const h = f[1]
-        if (Utils.isEmpty(h)) {
-          // 获取公式的值 数字
-          const t = g.split(this.TABLE_SEPARATOR)
-          let origVal = ''
-          const calCode = t[0] // 当前计算的code
-          const key = t[1]
-          if (mainCode === calCode) { // 主表
-            origVal = this.getValueByKey(data, key)
-          } else { // 其他子表
-            if (isSameTable && Utils.isNotEmpty(row)) { // 相同的子表
-              origVal = this.getValueByKey(data, key, calCode, row)
-            } else { // 如果改变的是主表,则取一列的值
-              origVal = this.getColumnValue(data, calCode, key)
+        })
+    },
+    getCalFormulaSubValue (formula, formData, changeField, changeCode, curCode) {
+        const rowData = JSON.parse(JSON.stringify(formData[changeCode]))
+        if (Utils.isArray(rowData)) {
+            const res = []
+            for (let i = 0; i < rowData.length; i++) {
+                const row = rowData[i]
+                const obj = {}
+                for (const key in row) {
+                    if (row.hasOwnProperty(key)) {
+                        let val = row[key]
+                        if (key === changeField) {
+                            val = this.getCalFormulaValue(formula, formData, changeCode, curCode, i)
+                        }
+                        obj[key] = val
+                    }
+                }
+                res.push(obj)
             }
-          }
-          // 修复 特殊字符的bug
-          let val = ''
-          val = (val = (val = (val = JSON.stringify(origVal) + '').replace(/\\\\(?=.+)/g, '"+CHAR(92)+"')).replace(/\\\"(?=.+)/g, '"+CHAR(34)+"')).replace(/\\n(?=.+)/g, '"+CHAR(10)+"')
-          if (!isNaN(origVal) && origVal < 0) {
-            val = '(' + val + ')'
-          }
-          e.push(val)
+            return res
         } else {
-          e.push('"' + n + '"')
-        }
-      } else {
-        e.push(n)
-      }
-    })
-    // console.error(e.join(''))
-    try {
-      v = this.evalFormula(e.join(''))
-    } catch (e) {
-      v = ''
-    }
-    return v
-  },
-  getValueByKey(data, key, code, row) {
-    if (!data) {
-      return this.getRealValue()
-    }
-    if (Utils.isNotEmpty(code)) {
-      return this.getRealValue(data[code][row][key])
-    } else {
-      return this.getRealValue(data[key])
-    }
-  },
-  // 获取一行数据
-  getColumnValue(data, code, key) {
-    const tableData = data[code]
-    if (Utils.isEmpty(tableData)) {
-      return ''
-    }
-    const v = tableData.map((d) => {
-      return this.getRealValue(d[key])
-    })
-    return JSON.stringify(v)
-  },
-  // TODO: 需要传递类型,判断类型不同进行进行计算,默认是字符串
-  // 暂时处理把能转数字类型转数字
-  getRealValue(val) {
-    if (Utils.isEmpty(val)) return ''
-    if (Utils.isNum(val)) {
-      return Number(val)
-    } else {
-      return val
-    }
-  },
-
-  getEvalFormula: function() {
-    if (Utils.isEmpty(this.EVAL_FORMULA)) {
-      // 做缓存避免运算
-      const b = []
-      Object.keys(FormulaUtil).forEach(n => {
-        b.push('var ' + n + '=FormulaUtil.' + n)
-      })
-
-      this.EVAL_FORMULA = b.join(';') + ';'
-    }
-    return this.EVAL_FORMULA
-  },
-  evalFormula: function(a) {
-    let c = null
-    let env = null
-    try {
-      env = this.getEvalFormula()
-      c = new Function(env + 'return ' + a + ';')()
-    } catch (e) {
-      console.error(e)
-      c = null
-    }
-    return c
-  },
-  /**
-   * 表单提交校验
-   * @param {*} formula 计算的公式
-   * @param {*} data 数据
-   * @param {*} mainCode  主表code
-   */
-  runFormSubmitVerify(formula, data, mainCode) {
-    // eslint-disable-next-line no-useless-escape
-    const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
-    const e = []
-    let v = true
-
-    d.forEach(n => {
-      if (/^\$(_widget_)/.test(n)) {
-        const f = n.replace('$_widget_', '').split('#')
-        const g = f[0]
-        const h = f[1]
-        if (Utils.isEmpty(h)) {
-          // 获取公式的值 数字
-          const t = g.split(this.TABLE_SEPARATOR)
-          let val = '""'
-          const calCode = t[0] // 当前计算的code
-          const key = t[1]
-          const isMainTable = calCode === mainCode// 是否主表
-          if (isMainTable) { // 主表
-            val = this.getValueByKey(data, key)
-          } else { // 子表  是主表,则取一列的值
-            val = this.getColumnValue(data, calCode, key)
-          }
-          e.push(val)
+            // TODO: 一对一
+            if (Utils.isNotEmpty(rowData[changeField])) {
+                rowData[changeField] = this.getCalFormulaValue(formula, formData, changeCode, curCode)
+            }
+            return rowData
+        }
+    },
+    /**
+     * 通过计算的值
+     */
+    getCalFormulaValue (responseFormula, data, curCode, mainCode, row) {
+        const formula = responseFormula.formula
+        const changename = responseFormula.changename// 修改字段
+        const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : [] // 改变的对象
+        const isSameTable = changeObj[0] === curCode // 是否相同的表
+        // eslint-disable-next-line no-useless-escape
+        const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
+        const e = []
+        let v = ''
+        d.forEach(n => {
+            if (/^\$(_widget_)/.test(n)) {
+                const f = n.replace('$_widget_', '').split('#')
+                const g = f[0]
+                const h = f[1]
+                if (Utils.isEmpty(h)) {
+                    // 获取公式的值 数字
+                    const t = g.split(this.TABLE_SEPARATOR)
+                    let origVal = ''
+                    const calCode = t[0] // 当前计算的code
+                    const key = t[1]
+                    if (mainCode === calCode) { // 主表
+                        origVal = this.getValueByKey(data, key)
+                    } else { // 其他子表
+                        if (isSameTable && Utils.isNotEmpty(row)) { // 相同的子表
+                            origVal = this.getValueByKey(data, key, calCode, row)
+                        } else { // 如果改变的是主表,则取一列的值
+                            origVal = this.getColumnValue(data, calCode, key)
+                        }
+                    }
+                    // 修复 特殊字符的bug
+                    let val = ''
+                    val = (val = (val = (val = JSON.stringify(origVal) + '').replace(/\\\\(?=.+)/g, '"+CHAR(92)+"')).replace(/\\\"(?=.+)/g, '"+CHAR(34)+"')).replace(/\\n(?=.+)/g, '"+CHAR(10)+"')
+                    if (!isNaN(origVal) && origVal < 0) {
+                        val = '(' + val + ')'
+                    }
+                    e.push(val)
+                } else {
+                    e.push('"' + n + '"')
+                }
+            } else {
+                e.push(n)
+            }
+        })
+        // console.error(e.join(''))
+        try {
+            v = this.evalFormula(e.join(''))
+        } catch (e) {
+            v = ''
+        }
+        return v
+    },
+    getValueByKey (data, key, code, row) {
+        if (!data) {
+            return this.getRealValue()
+        }
+        if (Utils.isNotEmpty(code)) {
+            return this.getRealValue(data[code][row][key])
         } else {
-          e.push('"' + n + '"')
-        }
-      } else {
-        e.push(n)
-      }
-    })
-    try {
-      v = this.evalFormula(e.join(''))
-    } catch (e) {
-      console.warn(e)
-      v = true
-    }
+            return this.getRealValue(data[key])
+        }
+    },
+    // 获取一行数据
+    getColumnValue (data, code, key) {
+        const tableData = data[code]
+        if (Utils.isEmpty(tableData)) {
+            return ''
+        }
+        const v = tableData.map((d) => {
+            return this.getRealValue(d[key])
+        })
+        return JSON.stringify(v)
+    },
+    // TODO: 需要传递类型,判断类型不同进行进行计算,默认是字符串
+    // 暂时处理把能转数字类型转数字
+    getRealValue (val) {
+        if (Utils.isEmpty(val)) return ''
+        if (Utils.isNum(val)) {
+            return Number(val)
+        } else {
+            return val
+        }
+    },
 
-    return v
-  },
-  getSelectorValue(store, val) {
-    if (Utils.isEmpty(val)) return ''
-    if (store === 'json') {
-      return JSON.stringify(val)
-    } else if (store === 'id') {
-      return val.map((d) => { return d.id }).join(',')
-    } else if (store === 'bind') {
-      return val.map((d) => { return d.name }).join(',')
-    }
-  },
-  getCurrentDataValue({ selectorType, bindId, fieldName, storeType }) {
-    const userInfo = store.getters.userInfo
-    // 缓存用户
-    if (userInfo.employee && userInfo.employee.id) {
-      const selectors = [{
-        'id': userInfo.employee.id,
-        'name': userInfo.employee.name
-      }]
-      this.CACHE_CURRENT_USER_DATA['user'] = selectors
-    }
+    getEvalFormula: function () {
+        if (Utils.isEmpty(this.EVAL_FORMULA)) {
+            // 做缓存避免运算
+            const b = []
+            Object.keys(FormulaUtil).forEach(n => {
+                b.push('var ' + n + '=FormulaUtil.' + n)
+            })
 
-    // 当前组织
-    if (userInfo.org && userInfo.org.id) {
-      const selectors = [{
-        'id': userInfo.org.id,
-        'name': userInfo.org.name
-      }]
-      this.CACHE_CURRENT_USER_DATA['org'] = selectors
-    }
-    // 岗位
-    if (Utils.isNotEmpty(userInfo.positions)) {
-      const selectors = []
-      userInfo.positions.forEach((item) => {
-        if (Utils.isNotEmpty(item) && Utils.isNotEmpty(item.id)) {
-          selectors.push({
-            'id': item.id,
-            'name': item.name
-          })
-        }
-      })
-      this.CACHE_CURRENT_USER_DATA['position'] = selectors
-    }
-    // 角色
-    if (Utils.isNotEmpty(userInfo.role)) {
-      const selectors = []
-      userInfo.role.forEach((item) => {
-        if (Utils.isNotEmpty(item) && Utils.isNotEmpty(item.id)) {
-          selectors.push({
-            'id': item.id,
-            'name': item.name
-          })
-        }
-      })
-      this.CACHE_CURRENT_USER_DATA['role'] = selectors
-    }
-    // 回调数据
-    return this.getSelectorValue(storeType, this.CACHE_CURRENT_USER_DATA[selectorType])
-  },
-  /**
-   * 绑定值回调
-   * @param {*} store
-   * @param {*} bindId
-   * @param {*} value
-   * @param {*} callback
-   */
-  bindIdCallback(store, bindId, value, callback) {
-    if (store === 'bind') {
-      callback(bindId, this.getSelectorValue('id', value))
-    }
-  },
-  /**
-   * 获取子表字段默认值
-   */
-  async getTableDefaultData(field) {
-    const columns = field.field_options.columns
-    const tableDefaultValue = {}
-    if (columns && columns.length > 0) {
-      const subColumns = FormFieldUtil.getColumns(columns)
-      for (let i = 0; i < subColumns.length; i++) {
-        const column = subColumns[i]
-        const defaultValue = await FormUtil.getFieldDefaultValue(column)
-        tableDefaultValue[column.name] = defaultValue
-      }
-    }
-    return tableDefaultValue
-  },
-  /**
-   * 获取子表空数据
-   * @param {*} field
-   */
-  getTableDefaultColumnData(field) {
-    const columns = field.field_options.columns
-    const defaultValue = {}
-    if (columns && columns.length > 0) {
-      const subColumns = FormFieldUtil.getColumns(columns)
-      for (let i = 0; i < subColumns.length; i++) {
-        const column = subColumns[i]
-        defaultValue[column.name] = ''
-      }
-    }
-    return defaultValue
-  },
-  /**
-   * 获取字段默认值
-   */
-  async getFieldDefaultValue(field) {
-    const fieldName = field.name
-    const fieldOptions = field.field_options
-    const fieldType = field.field_type
-    const defaultValueType = fieldOptions.default_value_type || 'fixed'
-    const defaultValue = fieldOptions.default_value
-    let result = ''
-    // ================= 固定值   =================
-    if (defaultValueType === 'fixed') {
-      if (fieldType === 'radio' || fieldType === 'checkbox' || fieldType === 'select') { // 单选,复选,下拉
-        const checkedValue = []
-        if (Utils.isNotEmpty(fieldOptions.options)) {
-          fieldOptions.options.forEach(option => {
-            if (option['checked']) {
-              checkedValue.push(option['val'])
+            this.EVAL_FORMULA = b.join(';') + ';'
+        }
+        return this.EVAL_FORMULA
+    },
+    evalFormula: function (a) {
+        let c = null
+        let env = null
+        try {
+            env = this.getEvalFormula()
+            c = new Function(env + 'return ' + a + ';')()
+        } catch (e) {
+            console.error(e)
+            c = null
+        }
+        return c
+    },
+    /**
+     * 表单提交校验
+     * @param {*} formula 计算的公式
+     * @param {*} data 数据
+     * @param {*} mainCode  主表code
+     */
+    runFormSubmitVerify (formula, data, mainCode) {
+        // eslint-disable-next-line no-useless-escape
+        const d = formula.split(/(\$[0-9a-zA-Z\._]+#[0-9A-Fa-f]*)/g)
+        const e = []
+        let v = true
+
+        d.forEach(n => {
+            if (/^\$(_widget_)/.test(n)) {
+                const f = n.replace('$_widget_', '').split('#')
+                const g = f[0]
+                const h = f[1]
+                if (Utils.isEmpty(h)) {
+                    // 获取公式的值 数字
+                    const t = g.split(this.TABLE_SEPARATOR)
+                    let val = '""'
+                    const calCode = t[0] // 当前计算的code
+                    const key = t[1]
+                    const isMainTable = calCode === mainCode// 是否主表
+                    if (isMainTable) { // 主表
+                        val = this.getValueByKey(data, key)
+                    } else { // 子表  是主表,则取一列的值
+                        val = this.getColumnValue(data, calCode, key)
+                    }
+                    e.push(val)
+                } else {
+                    e.push('"' + n + '"')
+                }
+            } else {
+                e.push(n)
             }
-          })
-        }
-        result = checkedValue.join(',')
-      } else if (fieldType === 'currentDate' || fieldType === 'currentTime') { // 当前时间,当前日期
-        result = this.getFieldDatefmtValue(fieldOptions)
-      } else if (fieldType === 'autoNumber') { // 自动编号
-        if (Utils.toBoolean(fieldOptions.init, false)) {
-          await getNextIdByAlias({
-            alias: fieldOptions.identity
-          }).then(response => {
-            result = response.data
-          }).catch(() => {})
-        }
-      } else if (fieldType === 'currentUser' || fieldType === 'currentOrg') { // 当前用户、组织
-        result = this.getCurrentDataValue({
-          selectorType: fieldType === 'currentUser' ? 'user' : 'org',
-          bindId: fieldOptions.bind_id,
-          name: fieldName,
-          storeType: fieldOptions.store
         })
-      } else if (fieldType === 'address') { // 地址 固定值
-        result = defaultValue ? this.getAddressValue(defaultValue, '', fieldOptions) : ''
-      } else { // 默认值
-        result = defaultValue || ''
-      }
-      // ================= 预设值   =================
-    } else if (defaultValueType === 'present') {
-      if (fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg') { // 当前用户、组织
-        result = this.getCurrentDataValue({
-          selectorType: fieldOptions.selector_type || 'user',
-          bindId: fieldOptions.bind_id,
-          storeType: fieldOptions.store,
-          fieldName: fieldName
-        })
-      }
-      // ================= 动态值   =================
-    } else if (defaultValueType === 'dynamic') {
-      if (Utils.isEmpty(defaultValue)) {
-        return
-      }
-      // 缓存之前的值
-      await this.getDynamicValue(defaultValue).then(data => {
-        result = data
-      })
-    // =================  当前时间   =================
-    } else if (defaultValueType === 'today') { // 当前时间
-      result = this.getFieldDatefmtValue(fieldOptions)
-    }
+        try {
+            v = this.evalFormula(e.join(''))
+        } catch (e) {
+            console.warn(e)
+            v = true
+        }
 
-    return result
-  },
-  /**
-   * 获取当前格式化日期
-   * @param {*} fieldOptions
-   */
-  getFieldDatefmtValue(fieldOptions) {
-    let datefmt = FormOptions.t.DATE_FORMATS['datetime']
-    if (fieldOptions['datefmt_type'] && fieldOptions['datefmt_type'] !== 'custom') {
-      datefmt = FormOptions.t.DATE_FORMATS[fieldOptions['datefmt_type']] || FormOptions.t.DATE_FORMATS['date']
-    } else {
-      datefmt = fieldOptions['datefmt'] || FormOptions.t.DATE_FORMATS['date']
-    }
-    return fecha.format(new Date(), datefmt)
-  },
-  // 地址顶部的值
-  getAddressTopVal(fieldOptions) {
-    const top = fieldOptions.top || 'country'
-    const topval = fieldOptions.topval
-    if (Utils.isEmpty(topval)) {
-      if (top === 'country') { return '0' }
-      return '' // 异常配置
-    }
-    if (top === 'country') {
-      return '0'
-    } else if (top === 'province' || top === 'city' || top === 'district') {
-      return topval[topval.length - 1]
-    }
-    return ''
-  },
-  // 地址的值
-  getAddressValue(value, model, fieldOptions) {
-    const topIndex = AddressUtls.getLevelIndex(fieldOptions.top || 'country')
-    const levelIndex = AddressUtls.getLevelIndex(fieldOptions.level || 'district')
-    let data = {
-      street: fieldOptions.street || ''
-    }
-    if (Utils.isNotEmpty(model)) {
-      data = Utils.parseJSON(model)
-    }
-    let v = 0
-    for (let i = topIndex; i < levelIndex + 1; i++) {
-      const key = AddressUtls.levelArr[i]
-      data[key] = value[v] || ''
-      v++
-    }
+        return v
+    },
+    getSelectorValue (store, val) {
+        if (Utils.isEmpty(val)) return ''
+        if (store === 'json') {
+            return JSON.stringify(val)
+        } else if (store === 'id') {
+            return val.map((d) => { return d.id }).join(',')
+        } else if (store === 'bind') {
+            return val.map((d) => { return d.name }).join(',')
+        }
+    },
+    getCurrentDataValue ({ selectorType, bindId, fieldName, storeType }) {
+        const userInfo = store.getters.userInfo
+        const { level = '' } = store.getters
+        // 缓存用户
+        if (userInfo.employee && userInfo.employee.id) {
+            const selectors = [{
+                'id': userInfo.employee.id,
+                'name': userInfo.employee.name
+            }]
+            this.CACHE_CURRENT_USER_DATA['user'] = selectors
+        }
+        // 当前层级
+        if (selectorType === 'currentPosition') {
+            const selectors = level.split(',').map(str => ({ id: str }))
+            console.log(selectors)
+            this.CACHE_CURRENT_USER_DATA['currentPosition'] = selectors
+        }
+        // 当前组织
+        if (userInfo.org && userInfo.org.id) {
+            const selectors = [{
+                'id': userInfo.org.id,
+                'name': userInfo.org.name
+            }]
+            this.CACHE_CURRENT_USER_DATA['org'] = selectors
+        }
+        // 岗位
+        if (Utils.isNotEmpty(userInfo.positions)) {
+            const selectors = []
+            userInfo.positions.forEach((item) => {
+                if (Utils.isNotEmpty(item) && Utils.isNotEmpty(item.id)) {
+                    selectors.push({
+                        'id': item.id,
+                        'name': item.name
+                    })
+                }
+            })
+            this.CACHE_CURRENT_USER_DATA['position'] = selectors
+        }
+        // 角色
+        if (Utils.isNotEmpty(userInfo.role)) {
+            const selectors = []
+            userInfo.role.forEach((item) => {
+                if (Utils.isNotEmpty(item) && Utils.isNotEmpty(item.id)) {
+                    selectors.push({
+                        'id': item.id,
+                        'name': item.name
+                    })
+                }
+            })
+            this.CACHE_CURRENT_USER_DATA['role'] = selectors
+        }
+        // 回调数据
+        return this.getSelectorValue(storeType, this.CACHE_CURRENT_USER_DATA[selectorType])
+    },
+    /**
+     * 绑定值回调
+     * @param {*} store
+     * @param {*} bindId
+     * @param {*} value
+     * @param {*} callback
+     */
+    bindIdCallback (store, bindId, value, callback) {
+        if (store === 'bind') {
+            callback(bindId, this.getSelectorValue('id', value))
+        }
+    },
+    /**
+     * 获取子表字段默认值
+     */
+    async getTableDefaultData (field) {
+        const columns = field.field_options.columns
+        const tableDefaultValue = {}
+        if (columns && columns.length > 0) {
+            const subColumns = FormFieldUtil.getColumns(columns)
+            for (let i = 0; i < subColumns.length; i++) {
+                const column = subColumns[i]
+                const defaultValue = await FormUtil.getFieldDefaultValue(column)
+                tableDefaultValue[column.name] = defaultValue
+            }
+        }
+        return tableDefaultValue
+    },
+    /**
+     * 获取子表空数据
+     * @param {*} field
+     */
+    getTableDefaultColumnData (field) {
+        const columns = field.field_options.columns
+        const defaultValue = {}
+        if (columns && columns.length > 0) {
+            const subColumns = FormFieldUtil.getColumns(columns)
+            for (let i = 0; i < subColumns.length; i++) {
+                const column = subColumns[i]
+                defaultValue[column.name] = ''
+            }
+        }
+        return defaultValue
+    },
+    /**
+     * 获取字段默认值
+     */
+    async getFieldDefaultValue (field) {
+        const fieldName = field.name
+        const fieldOptions = field.field_options
+        const fieldType = field.field_type
+        const defaultValueType = fieldOptions.default_value_type || 'fixed'
+        const defaultValue = fieldOptions.default_value
+        let result = ''
+        // ================= 固定值   =================
+        if (defaultValueType === 'fixed') {
+            if (fieldType === 'radio' || fieldType === 'checkbox' || fieldType === 'select') { // 单选,复选,下拉
+                const checkedValue = []
+                if (Utils.isNotEmpty(fieldOptions.options)) {
+                    fieldOptions.options.forEach(option => {
+                        if (option['checked']) {
+                            checkedValue.push(option['val'])
+                        }
+                    })
+                }
+                result = checkedValue.join(',')
+            } else if (fieldType === 'currentDate' || fieldType === 'currentTime') { // 当前时间,当前日期
+                result = this.getFieldDatefmtValue(fieldOptions)
+            } else if (fieldType === 'autoNumber') { // 自动编号
+                if (Utils.toBoolean(fieldOptions.init, false)) {
+                    await getNextIdByAlias({
+                        alias: fieldOptions.identity
+                    }).then(response => {
+                        result = response.data
+                    }).catch(() => { })
+                }
+            } else if (fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition') { // 当前用户、组织
+                const types = {
+                    currentUser: 'user',
+                    currentOrg: 'org',
+                    currentPosition: 'position'
+                }
+                result = this.getCurrentDataValue({
+                    selectorType: types[fieldType],
+                    bindId: fieldOptions.bind_id,
+                    name: fieldName,
+                    storeType: fieldOptions.store
+                })
+            } else if (fieldType === 'address') { // 地址 固定值
+                result = defaultValue ? this.getAddressValue(defaultValue, '', fieldOptions) : ''
+            } else { // 默认值
+                result = defaultValue || ''
+            }
+            // ================= 预设值   =================
+        } else if (defaultValueType === 'present') {
+            if (fieldType === 'selector' || fieldType === 'currentUser' || fieldType === 'currentOrg' || fieldType === 'currentPosition') { // 当前用户、组织
+                result = this.getCurrentDataValue({
+                    selectorType: fieldType === 'currentPosition' ? 'currentPosition' : fieldOptions.selector_type || 'user',
+                    bindId: fieldOptions.bind_id,
+                    storeType: fieldOptions.store,
+                    fieldName: fieldName
+                })
+            }
+            // ================= 动态值   =================
+        } else if (defaultValueType === 'dynamic') {
+            if (Utils.isEmpty(defaultValue)) {
+                return
+            }
+            // 缓存之前的值
+            await this.getDynamicValue(defaultValue).then(data => {
+                result = data
+            })
+            // =================  当前时间   =================
+        } else if (defaultValueType === 'today') { // 当前时间
+            result = this.getFieldDatefmtValue(fieldOptions)
+        }
 
-    return JSON.stringify(data)
-  },
-  // 控件地址值
-  getAddressControlValue(model, fieldOptions) {
-    if (Utils.isEmpty(model)) {
-      return []
-    }
-    const data = Utils.parseJSON(model)
-    const topIndex = AddressUtls.getLevelIndex(fieldOptions.top || 'country')
-    const levelIndex = AddressUtls.getLevelIndex(fieldOptions.level || 'district')
-    const val = []
-    for (let i = topIndex; i < levelIndex + 1; i++) {
-      const key = AddressUtls.levelArr[i]
-      if (data[key]) {
-        val.push(data[key])
-      }
-    }
-    return val
-  },
-  // 获得动态值
-  getDynamicValue(value, vars) {
-    return new Promise((resolve, reject) => {
-      const params = {
-        script: value,
-        vars: vars || ''
-      }
-      remoteRequest('getScriptValue', params, () => {
-        return new Promise((rev, rej) => {
-          getScriptValue(params).then(response => {
-            rev(response)
-          }).catch(error => {
-            rej(error)
-          })
+        return result
+    },
+    /**
+     * 获取当前格式化日期
+     * @param {*} fieldOptions
+     */
+    getFieldDatefmtValue (fieldOptions) {
+        let datefmt = FormOptions.t.DATE_FORMATS['datetime']
+        if (fieldOptions['datefmt_type'] && fieldOptions['datefmt_type'] !== 'custom') {
+            datefmt = FormOptions.t.DATE_FORMATS[fieldOptions['datefmt_type']] || FormOptions.t.DATE_FORMATS['date']
+        } else {
+            datefmt = fieldOptions['datefmt'] || FormOptions.t.DATE_FORMATS['date']
+        }
+        return fecha.format(new Date(), datefmt)
+    },
+    // 地址顶部的值
+    getAddressTopVal (fieldOptions) {
+        const top = fieldOptions.top || 'country'
+        const topval = fieldOptions.topval
+        if (Utils.isEmpty(topval)) {
+            if (top === 'country') { return '0' }
+            return '' // 异常配置
+        }
+        if (top === 'country') {
+            return '0'
+        } else if (top === 'province' || top === 'city' || top === 'district') {
+            return topval[topval.length - 1]
+        }
+        return ''
+    },
+    // 地址的值
+    getAddressValue (value, model, fieldOptions) {
+        const topIndex = AddressUtls.getLevelIndex(fieldOptions.top || 'country')
+        const levelIndex = AddressUtls.getLevelIndex(fieldOptions.level || 'district')
+        let data = {
+            street: fieldOptions.street || ''
+        }
+        if (Utils.isNotEmpty(model)) {
+            data = Utils.parseJSON(model)
+        }
+        let v = 0
+        for (let i = topIndex; i < levelIndex + 1; i++) {
+            const key = AddressUtls.levelArr[i]
+            data[key] = value[v] || ''
+            v++
+        }
+
+        return JSON.stringify(data)
+    },
+    // 控件地址值
+    getAddressControlValue (model, fieldOptions) {
+        if (Utils.isEmpty(model)) {
+            return []
+        }
+        const data = Utils.parseJSON(model)
+        const topIndex = AddressUtls.getLevelIndex(fieldOptions.top || 'country')
+        const levelIndex = AddressUtls.getLevelIndex(fieldOptions.level || 'district')
+        const val = []
+        for (let i = topIndex; i < levelIndex + 1; i++) {
+            const key = AddressUtls.levelArr[i]
+            if (data[key]) {
+                val.push(data[key])
+            }
+        }
+        return val
+    },
+    // 获得动态值
+    getDynamicValue (value, vars) {
+        return new Promise((resolve, reject) => {
+            const params = {
+                script: value,
+                vars: vars || ''
+            }
+            remoteRequest('getScriptValue', params, () => {
+                return new Promise((rev, rej) => {
+                    getScriptValue(params).then(response => {
+                        rev(response)
+                    }).catch(error => {
+                        rej(error)
+                    })
+                })
+            }, true).then(response => {
+                const data = response.data
+                this.CACHE_DYNAMIC_VALUE[value] = data
+                resolve(data)
+            }).catch(() => {
+            })
         })
-      }, true).then(response => {
-        const data = response.data
-        this.CACHE_DYNAMIC_VALUE[value] = data
-        resolve(data)
-      }).catch(() => {
-      })
-    })
-  },
-  setResponseLinkages: function(responseLinkages, model, code) {
-    if (model.field_type === 'table') { //  判断是否是主表,子表他自己处理
-      model.field_options.columns.forEach((item) => {
-        this.setChangeLinkagesData(responseLinkages, item, model.name)
-      })
-    } else { // 主表
-      this.setChangeLinkagesData(responseLinkages, model, code)
-    }
-  },
-  setChangeLinkagesData: function(responseLinkages, model, code) {
-    const fieldOptions = model.field_options
-    if (Utils.isEmpty(fieldOptions)) {
-      return
-    }
-    const type = fieldOptions.default_value_type
-    const linkage = fieldOptions.default_value
-    if (type !== 'linkage' || Utils.isEmpty(linkage)) { return }
-    const changename = code + this.TABLE_SEPARATOR + model.name
-    const changFormula = {
-      changename: changename,
-      linkage: linkage
-    }
-    const key = code + this.TABLE_SEPARATOR + linkage.field
-    if (!responseLinkages[key]) { responseLinkages[key] = [] }
-    responseLinkages[key].push(changFormula)
-  },
-  // TODO:数据联动
-  // 1、主表数据联动 (完成)
-  // 2、子表的数据联动
-  // 3、不同控件间的数据联动
-  // 4、支持不同控件进行联动
-  // 5、实现多级联动
-  runLinkage: function(self, responseLinkages, field, row) {
-    if (!responseLinkages) { return }
-    const curCode = field.code
-    const key = field.name
-    for (let i = 0; i < responseLinkages.length; i++) {
-      const responseLinkage = responseLinkages[i]
-      const linkage = responseLinkage.linkage
-      const changename = responseLinkage.changename// 修改字段
-      const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
+    },
+    setResponseLinkages: function (responseLinkages, model, code) {
+        if (model.field_type === 'table') { //  判断是否是主表,子表他自己处理
+            model.field_options.columns.forEach((item) => {
+                this.setChangeLinkagesData(responseLinkages, item, model.name)
+            })
+        } else { // 主表
+            this.setChangeLinkagesData(responseLinkages, model, code)
+        }
+    },
+    setChangeLinkagesData: function (responseLinkages, model, code) {
+        const fieldOptions = model.field_options
+        if (Utils.isEmpty(fieldOptions)) {
+            return
+        }
+        const type = fieldOptions.default_value_type
+        const linkage = fieldOptions.default_value
+        if (type !== 'linkage' || Utils.isEmpty(linkage)) { return }
+        const changename = code + this.TABLE_SEPARATOR + model.name
+        const changFormula = {
+            changename: changename,
+            linkage: linkage
+        }
+        const key = code + this.TABLE_SEPARATOR + linkage.field
+        if (!responseLinkages[key]) { responseLinkages[key] = [] }
+        responseLinkages[key].push(changFormula)
+    },
+    // TODO:数据联动
+    // 1、主表数据联动 (完成)
+    // 2、子表的数据联动
+    // 3、不同控件间的数据联动
+    // 4、支持不同控件进行联动
+    // 5、实现多级联动
+    runLinkage: function (self, responseLinkages, field, row) {
+        if (!responseLinkages) { return }
+        const curCode = field.code
+        const key = field.name
+        for (let i = 0; i < responseLinkages.length; i++) {
+            const responseLinkage = responseLinkages[i]
+            const linkage = responseLinkage.linkage
+            const changename = responseLinkage.changename// 修改字段
+            const changeObj = changename ? changename.split(this.TABLE_SEPARATOR) : []// 改变的对象
 
-      const formParams = {
-        key: linkage.dataSource,
-        [`Q^${linkage.relyData}^S`]: this.getFieldDataValue(Utils.isEmpty(row), changeObj[0] === curCode, self.models, key, curCode, row)
-      }
+            const formParams = {
+                key: linkage.dataSource,
+                [`Q^${linkage.relyData}^S`]: this.getFieldDataValue(Utils.isEmpty(row), changeObj[0] === curCode, self.models, key, curCode, row)
+            }
 
-      // 加载数据
-      queryLinkageData(ActionUtils.formatParams(formParams)).then(response => {
-        const dataResult = response.data
-        if (Utils.isNotEmpty(dataResult)) {
-          const resultVal = dataResult[linkage.dataField]
-          self.models[changeObj[1]] = resultVal
-        }
-      }).catch((e) => {
-        console.error(e)
-      })
-    }
-  },
-  getFieldDataValue: function(isMainTable, isSameTable, data, key, code, row) {
-    let val = ''
-    if (isMainTable) { // 主表
-      val = data[key]
-    } else { // 子表
-      if (isSameTable) { // 相同的表
-        val = data[code][row][key]
-      } else { // 如果改变的是主表,则取一列的值
-        const tableData = data[code]
-        if (Utils.isEmpty(tableData)) {
-          return ''
+            // 加载数据
+            queryLinkageData(ActionUtils.formatParams(formParams)).then(response => {
+                const dataResult = response.data
+                if (Utils.isNotEmpty(dataResult)) {
+                    const resultVal = dataResult[linkage.dataField]
+                    self.models[changeObj[1]] = resultVal
+                }
+            }).catch((e) => {
+                console.error(e)
+            })
+        }
+    },
+    getFieldDataValue: function (isMainTable, isSameTable, data, key, code, row) {
+        let val = ''
+        if (isMainTable) { // 主表
+            val = data[key]
+        } else { // 子表
+            if (isSameTable) { // 相同的表
+                val = data[code][row][key]
+            } else { // 如果改变的是主表,则取一列的值
+                const tableData = data[code]
+                if (Utils.isEmpty(tableData)) {
+                    return ''
+                }
+                const v = tableData.map((d) => {
+                    return d[key]
+                })
+                val = JSON.stringify(v) + ''
+            }
         }
-        const v = tableData.map((d) => {
-          return d[key]
-        })
-        val = JSON.stringify(v) + ''
-      }
-    }
 
-    return val
-  },
-  /**
-   * 默认权限
-   */
-  getDefaultRigths(field) {
-    if (Utils.isEmpty(field) || Utils.isEmpty(field.field_options)) {
-      return
-    }
-    const hideRights = field.field_options.hide_rights
-    if (Utils.isNotEmpty(hideRights) && hideRights) {
-      return FormOptions.t.PERMISSIONS.HIDE
-    }
-    const readRights = field.field_options.read_rights
-    if (Utils.isNotEmpty(readRights) && readRights) {
-      return FormOptions.t.PERMISSIONS.READ
-    }
-  },
-  /**
-   *  表单意见权限
-   * @param {*} field
-   * @param {*} params
-   */
-  getDefaultApprovalOpinionRigths(field, params) {
-    if (!params) {
-      return
-    }
-    if (Utils.isNotEmpty(params.defId)) {
-      return FormOptions.t.PERMISSIONS.HIDE
-    }
-    if (this.readApprovalOpinionRigths(field, params)) {
-      return FormOptions.t.PERMISSIONS.READ
-    }
-  },
-  /**
-   * 表单意见读权限
-   * @param {*} field
-   * @param {*} params
-   */
-  readApprovalOpinionRigths(field, params) {
-    if (!params) {
-      return false
-    }
-    if (Utils.isNotEmpty(params.nodeId)) {
-      const formOpinionConfig = params.formOpinionData.formOpinionConfig
-      if (!formOpinionConfig) { return false }
-      const bindNode = formOpinionConfig[field.name] || []
-      return (Utils.isNotEmpty(bindNode) && !(bindNode.includes('') || bindNode.includes(params.nodeId)))
-    } else {
-      return false
-    }
-  },
+        return val
+    },
+    /**
+     * 默认权限
+     */
+    getDefaultRigths (field) {
+        if (Utils.isEmpty(field) || Utils.isEmpty(field.field_options)) {
+            return
+        }
+        const hideRights = field.field_options.hide_rights
+        if (Utils.isNotEmpty(hideRights) && hideRights) {
+            return FormOptions.t.PERMISSIONS.HIDE
+        }
+        const readRights = field.field_options.read_rights
+        if (Utils.isNotEmpty(readRights) && readRights) {
+            return FormOptions.t.PERMISSIONS.READ
+        }
+    },
+    /**
+     *  表单意见权限
+     * @param {*} field
+     * @param {*} params
+     */
+    getDefaultApprovalOpinionRigths (field, params) {
+        if (!params) {
+            return
+        }
+        if (Utils.isNotEmpty(params.defId)) {
+            return FormOptions.t.PERMISSIONS.HIDE
+        }
+        if (this.readApprovalOpinionRigths(field, params)) {
+            return FormOptions.t.PERMISSIONS.READ
+        }
+    },
+    /**
+     * 表单意见读权限
+     * @param {*} field
+     * @param {*} params
+     */
+    readApprovalOpinionRigths (field, params) {
+        if (!params) {
+            return false
+        }
+        if (Utils.isNotEmpty(params.nodeId)) {
+            const formOpinionConfig = params.formOpinionData.formOpinionConfig
+            if (!formOpinionConfig) { return false }
+            const bindNode = formOpinionConfig[field.name] || []
+            return (Utils.isNotEmpty(bindNode) && !(bindNode.includes('') || bindNode.includes(params.nodeId)))
+        } else {
+            return false
+        }
+    },
 
-  /**
-   * 构建表单验证规则
-   * @param {*} field
-   * @param {*} required
-   */
-  buildFormRules(field, required, models) {
-    const rules = []
-    const fieldOptions = field.field_options || {}
-    // 必填验证
-    if (required) {
-      rules.push({ required: true, message: I18n.t('validate.required') })
-      rules.push({ validator: validateRequired, message: I18n.t('validate.required') })
-    }
-    // 整型验证
-    if (fieldOptions.integer) {
-      rules.push({ validator: validateInteger, message: I18n.t('validate.integer') })
-    }
-    // 小数验证
-    if (fieldOptions.decimal) {
-      rules.push({
-        validator: validateDecimal,
-        decimal: fieldOptions.decimal
-      })
-    }
+    /**
+     * 构建表单验证规则
+     * @param {*} field
+     * @param {*} required
+     */
+    buildFormRules (field, required, models) {
+        const rules = []
+        const fieldOptions = field.field_options || {}
+        // 必填验证
+        if (required) {
+            rules.push({ required: true, message: I18n.t('validate.required') })
+            rules.push({ validator: validateRequired, message: I18n.t('validate.required') })
+        }
+        // 整型验证
+        if (fieldOptions.integer) {
+            rules.push({ validator: validateInteger, message: I18n.t('validate.integer') })
+        }
+        // 小数验证
+        if (fieldOptions.decimal) {
+            rules.push({
+                validator: validateDecimal,
+                decimal: fieldOptions.decimal
+            })
+        }
 
-    //  最大、最小字符串长度验证
-    if ((fieldOptions['is_min_length'] && Utils.isNotEmpty(fieldOptions['min_length'])) ||
-     (fieldOptions['is_max_length'] && Utils.isNotEmpty(fieldOptions['max_length']))) {
-      rules.push({
-        validator: validateLengthRange,
-        format: field.field_type === 'editor' ? (v) => {
-          let content = v.replace(/<\/?[^>]*>/g, '') // 去除HTML Tag
-          content = content.replace(/[|]*\n/, '') // 去除行尾空格
-          content = content.replace(/&npsp;/ig, '') // 去掉npsp
-          return content
-        } : false,
-        min: fieldOptions['is_min_length'] ? fieldOptions['min_length'] : null,
-        max: fieldOptions['is_max_length'] ? fieldOptions['max_length'] : null
-      })
-    }
+        //  最大、最小字符串长度验证
+        if ((fieldOptions['is_min_length'] && Utils.isNotEmpty(fieldOptions['min_length'])) ||
+            (fieldOptions['is_max_length'] && Utils.isNotEmpty(fieldOptions['max_length']))) {
+            rules.push({
+                validator: validateLengthRange,
+                format: field.field_type === 'editor' ? (v) => {
+                    let content = v.replace(/<\/?[^>]*>/g, '') // 去除HTML Tag
+                    content = content.replace(/[|]*\n/, '') // 去除行尾空格
+                    content = content.replace(/&npsp;/ig, '') // 去掉npsp
+                    return content
+                } : false,
+                min: fieldOptions['is_min_length'] ? fieldOptions['min_length'] : null,
+                max: fieldOptions['is_max_length'] ? fieldOptions['max_length'] : null
+            })
+        }
 
-    //  最大、最小值验证[数字]
-    if ((fieldOptions['is_min'] && Utils.isNotEmpty(fieldOptions['min'])) ||
-         (fieldOptions['is_max'] && Utils.isNotEmpty(fieldOptions['max']))) {
-      rules.push({
-        validator: validateNumberRange,
-        min: fieldOptions['is_min'] ? fieldOptions['min'] : null,
-        max: fieldOptions['is_max'] ? fieldOptions['max'] : null
-      })
-    }
+        //  最大、最小值验证[数字]
+        if ((fieldOptions['is_min'] && Utils.isNotEmpty(fieldOptions['min'])) ||
+            (fieldOptions['is_max'] && Utils.isNotEmpty(fieldOptions['max']))) {
+            rules.push({
+                validator: validateNumberRange,
+                min: fieldOptions['is_min'] ? fieldOptions['min'] : null,
+                max: fieldOptions['is_max'] ? fieldOptions['max'] : null
+            })
+        }
 
-    // 日期验证 date_format 不需要
+        // 日期验证 date_format 不需要
 
-    // 日期范围验证-开始、结束时间 date_between
-    if (Utils.isNotEmpty(fieldOptions['start_date_type']) ||
-       Utils.isNotEmpty(fieldOptions['end_date_type'])) {
-      rules.push({
-        validator: validateDateBetween,
-        fieldOptions: fieldOptions,
-        models: models
-      })
-    }
+        // 日期范围验证-开始、结束时间 date_between
+        if (Utils.isNotEmpty(fieldOptions['start_date_type']) ||
+            Utils.isNotEmpty(fieldOptions['end_date_type'])) {
+            rules.push({
+                validator: validateDateBetween,
+                fieldOptions: fieldOptions,
+                models: models
+            })
+        }
 
-    //  最多、最少选项验证
-    if ((fieldOptions['is_min_mum'] && Utils.isNotEmpty(fieldOptions['min_mum'])) ||
-     (fieldOptions['is_max_mum'] && Utils.isNotEmpty(fieldOptions['max_mum']))) {
-      rules.push({
-        validator: validateOptions,
-        min: fieldOptions['is_min_mum'] ? fieldOptions['min_mum'] : null,
-        max: fieldOptions['is_max_mum'] ? fieldOptions['max_mum'] : null
-      })
-    }
-    // 正则表达式
-    if (fieldOptions['data_format']) {
-      let dataFormatValue = fieldOptions['data_format_value']
-      let dataFormatMsg = fieldOptions['data_format_msg']
-      if (fieldOptions['data_format'] !== 'custom') {
-        dataFormatValue = dataFormatMap[fieldOptions['data_format']].regexp
-        dataFormatMsg = I18n.t('validate.' + fieldOptions['data_format'])
-      }
-      rules.push({
-        pattern: dataFormatValue,
-        message: dataFormatMsg
-      })
-    }
-    return rules
-  },
-  /**
-   * 初始化表单意见
-   */
-  initFormOpinionData: function(attrs) {
-    if (Utils.isEmpty(attrs)) { return null }
-    const opinionList = attrs.opinionList // 表单意见列表
-    const formOpinionConfig = attrs.formOpinion // 表单意见配置
-    if (Utils.isEmpty(opinionList)) { return null }
-    const opinionData = {
-      hasBindNode: false, // 是否包含节点
-      opinionList: [], // 表单意见数据list
-      formOpinionNodeData: {}, // 表单意见节点的数据
-      formOpinionConfig: {} // 表单意见配置
-    }
-    const formOpinionList = [] // 过滤掉待审批的
-    for (let i = 0; i < opinionList.length; i++) {
-      const opinion = opinionList[i]
-      if (Utils.isEmpty(opinion.completeTime)) { continue }
-      formOpinionList.push(opinion)
-    }
+        //  最多、最少选项验证
+        if ((fieldOptions['is_min_mum'] && Utils.isNotEmpty(fieldOptions['min_mum'])) ||
+            (fieldOptions['is_max_mum'] && Utils.isNotEmpty(fieldOptions['max_mum']))) {
+            rules.push({
+                validator: validateOptions,
+                min: fieldOptions['is_min_mum'] ? fieldOptions['min_mum'] : null,
+                max: fieldOptions['is_max_mum'] ? fieldOptions['max_mum'] : null
+            })
+        }
+        // 正则表达式
+        if (fieldOptions['data_format']) {
+            let dataFormatValue = fieldOptions['data_format_value']
+            let dataFormatMsg = fieldOptions['data_format_msg']
+            if (fieldOptions['data_format'] !== 'custom') {
+                dataFormatValue = dataFormatMap[fieldOptions['data_format']].regexp
+                dataFormatMsg = I18n.t('validate.' + fieldOptions['data_format'])
+            }
+            rules.push({
+                pattern: dataFormatValue,
+                message: dataFormatMsg
+            })
+        }
+        return rules
+    },
+    /**
+     * 初始化表单意见
+     */
+    initFormOpinionData: function (attrs) {
+        if (Utils.isEmpty(attrs)) { return null }
+        const opinionList = attrs.opinionList // 表单意见列表
+        const formOpinionConfig = attrs.formOpinion // 表单意见配置
+        if (Utils.isEmpty(opinionList)) { return null }
+        const opinionData = {
+            hasBindNode: false, // 是否包含节点
+            opinionList: [], // 表单意见数据list
+            formOpinionNodeData: {}, // 表单意见节点的数据
+            formOpinionConfig: {} // 表单意见配置
+        }
+        const formOpinionList = [] // 过滤掉待审批的
+        for (let i = 0; i < opinionList.length; i++) {
+            const opinion = opinionList[i]
+            if (Utils.isEmpty(opinion.completeTime)) { continue }
+            formOpinionList.push(opinion)
+        }
 
-    if (Utils.isEmpty(formOpinionConfig)) { // 没有绑定节点的
-      opinionData.hasBindNode = false
-      opinionData.opinionList = formOpinionList
-    } else {
-      const opinionMap = {}
-      for (let i = 0; i < formOpinionList.length; i++) {
-        const opinion = formOpinionList[i]
-        const nodeId = opinion.taskKey
-        const opinionMapList = opinionMap[nodeId]
-        if (Utils.isEmpty(opinionMapList)) {
-          opinionMap[nodeId] = []
-        }
-        opinionMap[nodeId].push(opinion)
-      }
-      const formOpinionNodeData = {}
-      for (const k in formOpinionConfig) {
-        const nodes = formOpinionConfig[k]
-        if (Utils.isEmpty(nodes) || nodes.includes('')) { // 全局节点
-          formOpinionNodeData[k] = formOpinionList
+        if (Utils.isEmpty(formOpinionConfig)) { // 没有绑定节点的
+            opinionData.hasBindNode = false
+            opinionData.opinionList = formOpinionList
         } else {
-          for (let i = 0; i < nodes.length; i++) {
-            const node = nodes[i]
-            const oList = opinionMap[node] || []
-            let list = formOpinionNodeData[k] || []
-            list = list.concat(oList)
-            formOpinionNodeData[k] = list
-          }
-        }
-      }
-      // 审批按时间排序
-      for (const key in formOpinionNodeData) {
-        let list = formOpinionNodeData[key]
-        list = list.sort((obj1, obj2) => {
-          const val1 = obj1.completeTime
-          const val2 = obj2.completeTime
-          return val1 < val2 ? -1 : val1 > val2 ? 1 : 0
-        })
-        formOpinionNodeData[key] = list
-      }
+            const opinionMap = {}
+            for (let i = 0; i < formOpinionList.length; i++) {
+                const opinion = formOpinionList[i]
+                const nodeId = opinion.taskKey
+                const opinionMapList = opinionMap[nodeId]
+                if (Utils.isEmpty(opinionMapList)) {
+                    opinionMap[nodeId] = []
+                }
+                opinionMap[nodeId].push(opinion)
+            }
+            const formOpinionNodeData = {}
+            for (const k in formOpinionConfig) {
+                const nodes = formOpinionConfig[k]
+                if (Utils.isEmpty(nodes) || nodes.includes('')) { // 全局节点
+                    formOpinionNodeData[k] = formOpinionList
+                } else {
+                    for (let i = 0; i < nodes.length; i++) {
+                        const node = nodes[i]
+                        const oList = opinionMap[node] || []
+                        let list = formOpinionNodeData[k] || []
+                        list = list.concat(oList)
+                        formOpinionNodeData[k] = list
+                    }
+                }
+            }
+            // 审批按时间排序
+            for (const key in formOpinionNodeData) {
+                let list = formOpinionNodeData[key]
+                list = list.sort((obj1, obj2) => {
+                    const val1 = obj1.completeTime
+                    const val2 = obj2.completeTime
+                    return val1 < val2 ? -1 : val1 > val2 ? 1 : 0
+                })
+                formOpinionNodeData[key] = list
+            }
 
-      opinionData.hasBindNode = true
-      opinionData.formOpinionNodeData = formOpinionNodeData
-      opinionData.formOpinionConfig = formOpinionConfig
-      opinionData.opinionList = formOpinionList
-    }
-    return opinionData
-  },
+            opinionData.hasBindNode = true
+            opinionData.formOpinionNodeData = formOpinionNodeData
+            opinionData.formOpinionConfig = formOpinionConfig
+            opinionData.opinionList = formOpinionList
+        }
+        return opinionData
+    },
 
-  hasLinkDynamicParams(fieldOptions) {
-    const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
-    if (Utils.isNotEmpty(conditions)) { return true }
-    return false
-  },
-  getDynamicParamsConfing(fieldOptions) {
-    const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
-    if (Utils.isEmpty(conditions)) { return {} }
-    const dynamicParams = {}
-    for (let i = 0; i < conditions.length; i++) {
-      const condition = conditions[i]
-      dynamicParams[condition.fieldName] = condition
-    }
-    return dynamicParams
-  },
-  /**
-   * 获取联动参数数据
-   * @param {*} fieldOptions
-   * @param {*} data
-   * @param {*} row
-   */
-  getLinkDynamicParams(fieldOptions, data = {}, code, row) {
-    const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
-    if (Utils.isEmpty(conditions)) { return {} }
-    const dynamicParams = {}
-    for (let i = 0; i < conditions.length; i++) {
-      const condition = conditions[i]
-      let val = ''
-      const changeValueName = condition.value
-      if (Utils.isNotEmpty(changeValueName) && condition.mode === 'bind') { // 绑定表单
-        const changeObj = changeValueName.split('.')// 改变的对象
-        if (changeObj.length > 1) {
-          const changeName = changeObj[changeObj.length - 1]
-          if (Utils.isNotEmpty(row)) {
-            if (Array.isArray(data)) {
-              val = data[code] && data[code][row] ? data[code][row][changeName] : (data[changeName] || '')
-            } else {
-              val = (data[changeName] || '')
-            }
-          } else { // 弹窗模式
-            const changeCode = changeObj[changeObj.length - 2]
-            // 判断 相同表.避免出现重复表名取值问题
-            if (changeCode === code) {
-              val = data[changeName] || ''
+    hasLinkDynamicParams (fieldOptions) {
+        const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
+        if (Utils.isNotEmpty(conditions)) { return true }
+        return false
+    },
+    getDynamicParamsConfing (fieldOptions) {
+        const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
+        if (Utils.isEmpty(conditions)) { return {} }
+        const dynamicParams = {}
+        for (let i = 0; i < conditions.length; i++) {
+            const condition = conditions[i]
+            dynamicParams[condition.fieldName] = condition
+        }
+        return dynamicParams
+    },
+    /**
+     * 获取联动参数数据
+     * @param {*} fieldOptions
+     * @param {*} data
+     * @param {*} row
+     */
+    getLinkDynamicParams (fieldOptions, data = {}, code, row) {
+        const conditions = fieldOptions['link_condition'] ? fieldOptions['link_condition'] : []
+        if (Utils.isEmpty(conditions)) { return {} }
+        const dynamicParams = {}
+        for (let i = 0; i < conditions.length; i++) {
+            const condition = conditions[i]
+            let val = ''
+            const changeValueName = condition.value
+            if (Utils.isNotEmpty(changeValueName) && condition.mode === 'bind') { // 绑定表单
+                const changeObj = changeValueName.split('.')// 改变的对象
+                if (changeObj.length > 1) {
+                    const changeName = changeObj[changeObj.length - 1]
+                    if (Utils.isNotEmpty(row)) {
+                        if (Array.isArray(data)) {
+                            val = data[code] && data[code][row] ? data[code][row][changeName] : (data[changeName] || '')
+                        } else {
+                            val = (data[changeName] || '')
+                        }
+                    } else { // 弹窗模式
+                        const changeCode = changeObj[changeObj.length - 2]
+                        // 判断 相同表.避免出现重复表名取值问题
+                        if (changeCode === code) {
+                            val = data[changeName] || ''
+                        }
+                    }
+                } else {
+                    val = data[changeObj[0]]
+                }
+            } else { // 固定值
+                val = changeValueName
             }
-          }
-        } else {
-          val = data[changeObj[0]]
+            dynamicParams[condition.fieldName] = val || ''
         }
-      } else { // 固定值
-        val = changeValueName
-      }
-      dynamicParams[condition.fieldName] = val || ''
-    }
-    return dynamicParams
-  },
-  getSwitchOptions(fieldOptions, valueKey = 'val', labelKey = 'label') {
-    const options = []
-    const activeValue = fieldOptions.active_value
-    const activeText = Utils.isNotEmpty(fieldOptions.active_text) ? fieldOptions.active_text : activeValue
-    const inactiveValue = fieldOptions.inactive_value
-    const inactiveText = Utils.isNotEmpty(fieldOptions.inactive_text) ? fieldOptions.inactive_text : inactiveValue
+        return dynamicParams
+    },
+    getSwitchOptions (fieldOptions, valueKey = 'val', labelKey = 'label') {
+        const options = []
+        const activeValue = fieldOptions.active_value
+        const activeText = Utils.isNotEmpty(fieldOptions.active_text) ? fieldOptions.active_text : activeValue
+        const inactiveValue = fieldOptions.inactive_value
+        const inactiveText = Utils.isNotEmpty(fieldOptions.inactive_text) ? fieldOptions.inactive_text : inactiveValue
 
-    options.push({
-      [valueKey]: activeValue,
-      [labelKey]: activeText
-    })
-    options.push({
-      [valueKey]: inactiveValue,
-      [labelKey]: inactiveText
-    })
-    return options
-  },
-  getLinkValueKey(fieldOptions, data) {
-    return fieldOptions['link_config'] ? fieldOptions['link_config'].id || '' : ''
-  },
-  getLinkLabelType(fieldOptions, data) {
-    return fieldOptions['link_config'] ? fieldOptions['link_config'].type || 'first' : 'first'
-  },
-  getLinkLabelKey(fieldOptions, data) {
-    return fieldOptions['link_config'] ? fieldOptions['link_config'].text || '' : ''
-  },
-  getLinkStructure(fieldOptions, data) {
-    return fieldOptions['link_config'] ? fieldOptions['link_config'].structure || 'list' : 'list'
-  },
-  getLinkConfig(fieldOptions, data) {
-    return fieldOptions['link_config'] ? fieldOptions['link_config'] || {} : {}
-  },
-  /**
-   * 处理流程关联
-   */
-  getBpmLinkData: function(attrs) {
-    if (Utils.isEmpty(attrs)) { return null }
-    return {
-      currentBpmLink: attrs.currentFormInst,
-      postBpmLink: attrs.postFormInst
+        options.push({
+            [valueKey]: activeValue,
+            [labelKey]: activeText
+        })
+        options.push({
+            [valueKey]: inactiveValue,
+            [labelKey]: inactiveText
+        })
+        return options
+    },
+    getLinkValueKey (fieldOptions, data) {
+        return fieldOptions['link_config'] ? fieldOptions['link_config'].id || '' : ''
+    },
+    getLinkLabelType (fieldOptions, data) {
+        return fieldOptions['link_config'] ? fieldOptions['link_config'].type || 'first' : 'first'
+    },
+    getLinkLabelKey (fieldOptions, data) {
+        return fieldOptions['link_config'] ? fieldOptions['link_config'].text || '' : ''
+    },
+    getLinkStructure (fieldOptions, data) {
+        return fieldOptions['link_config'] ? fieldOptions['link_config'].structure || 'list' : 'list'
+    },
+    getLinkConfig (fieldOptions, data) {
+        return fieldOptions['link_config'] ? fieldOptions['link_config'] || {} : {}
+    },
+    /**
+     * 处理流程关联
+     */
+    getBpmLinkData: function (attrs) {
+        if (Utils.isEmpty(attrs)) { return null }
+        return {
+            currentBpmLink: attrs.currentFormInst,
+            postBpmLink: attrs.postFormInst
+        }
     }
-  }
 }
 
 export default FormUtil

+ 31 - 31
src/store/getters.js

@@ -1,39 +1,39 @@
 export default {
-  // ===========  用户相关
-  userId: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.id : '', // 用户ID
-  name: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.employee.name : '', // 姓名
-  status: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.employee.status : '', // 用户状态
-  org: state => state.ibps.user.info ? state.ibps.user.info.org : {}, // 用户部门信息
-  isSuper: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.isSuper === 'Y' : false, // 是否超级管理员
-  account: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.account : '', // 用户名
-  regOpen: state => state.ibps.user.regOpen, // 注册状态
+    // ===========  用户相关
+    userId: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.id : '', // 用户ID
+    name: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.employee.name : '', // 姓名
+    status: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.employee.status : '', // 用户状态
+    org: state => state.ibps.user.info ? state.ibps.user.info.org : {}, // 用户部门信息
+    isSuper: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.isSuper === 'Y' : false, // 是否超级管理员
+    account: state => state.ibps.user.info && state.ibps.user.info.user ? state.ibps.user.info.user.account : '', // 用户名
+    regOpen: state => state.ibps.user.regOpen, // 注册状态
 
-  userInfo: state => state.ibps.user.info, // 用户信息
+    userInfo: state => state.ibps.user.info, // 用户信息
 
-  // =========== 租户
-  tenant: state => state.ibps.user.info && state.ibps.user.info.mainTenant ? state.ibps.user.info.mainTenant || {} : {}, // 当前租户
-  tenants: state => state.ibps.user.info && state.ibps.user.info.tenants ? state.ibps.user.info.tenants || [] : [], // 当前拥有的租户
-  tenantid: state => state.ibps.user.info && state.ibps.user.info.tenantId ? state.ibps.user.info.tenantId || '' : '', // 租户id
-  isTenantAdmin: state => state.ibps.user.info && state.ibps.user.info.isTenantAdmin ? state.ibps.user.info.isTenantAdmin || false : false, // 是否租户管理员
+    // =========== 租户
+    tenant: state => state.ibps.user.info && state.ibps.user.info.mainTenant ? state.ibps.user.info.mainTenant || {} : {}, // 当前租户
+    tenants: state => state.ibps.user.info && state.ibps.user.info.tenants ? state.ibps.user.info.tenants || [] : [], // 当前拥有的租户
+    tenantid: state => state.ibps.user.info && state.ibps.user.info.tenantId ? state.ibps.user.info.tenantId || '' : '', // 租户id
+    isTenantAdmin: state => state.ibps.user.info && state.ibps.user.info.isTenantAdmin ? state.ibps.user.info.isTenantAdmin || false : false, // 是否租户管理员
 
-  single: state => state.ibps.api.single, // 单体应用
-  baseApi: state => state.ibps.api.base, // baseAPI地址
-  websocket: state => state.ibps.api.websocket, // websocket地址
+    single: state => state.ibps.api.single, // 单体应用
+    baseApi: state => state.ibps.api.base, // baseAPI地址
+    websocket: state => state.ibps.api.websocket, // websocket地址
 
-  isTenantOpen: state => state.ibps.sass ? state.ibps.sass.tenantOpen : false, // 是否租户模式
+    isTenantOpen: state => state.ibps.sass ? state.ibps.sass.tenantOpen : false, // 是否租户模式
 
-  designTenantid: state => state.ibps.user && state.ibps.user.designTenantid ? state.ibps.user.designTenantid || '' : '',
-  // =========== 菜单
-  menus: state => state.ibps.menu.menus, // 菜单
-  routers: state => state.ibps.menu.routers, // 新增的路由表
-  // =========== 子系统
-  system: state => state.ibps.system.system, // 子系统
-  systemid: state => state.ibps.system.system ? state.ibps.system.system.id : '', // 子系统id
+    designTenantid: state => state.ibps.user && state.ibps.user.designTenantid ? state.ibps.user.designTenantid || '' : '',
+    // =========== 菜单
+    menus: state => state.ibps.menu.menus, // 菜单
+    routers: state => state.ibps.menu.routers, // 新增的路由表
+    // =========== 子系统
+    system: state => state.ibps.system.system, // 子系统
+    systemid: state => state.ibps.system.system ? state.ibps.system.system.id : '', // 子系统id
 
-  permissions: state => state.ibps.menu.permissions, //  拥有的权限
-  jianCeDuiXiangId: state => state.ibps.jianCeDuiXiangId ? state.ibps.jianCeDuiXiangId : '',
-  myform: state => state.ibps.myform ? state.ibps.myform : '',
-  jianCeCanShuId: state => state.ibps.jianCeCanShuId ? state.ibps.jianCeCanShuId : '',
-  // 获取所有用户信息
-  usersList: state => state.ibps.param && state.ibps.param.usersList ? state.ibps.param.usersList : []
+    permissions: state => state.ibps.menu.permissions, //  拥有的权限
+    myform: state => state.ibps.myform ? state.ibps.myform : '',
+    // 获取所有用户信息
+    usersList: state => state.ibps.param && state.ibps.param.usersList ? state.ibps.param.usersList : [],
+    // 获取用户最高层级
+    level: state => state.ibps.param && state.ibps.param.level ? state.ibps.param.level : []
 }

+ 13 - 12
src/store/modules/ibps/modules/param.js

@@ -2,29 +2,30 @@ export default {
     namespaced: true,
     state: {
         // 所有菜单
-        jianCeDuiXiangId: '',
-        jianCeCanShuId: '',
         myform: '',
         // 所有用户信息
-        usersList: []
+        usersList: [],
+        // 当前用户层级
+        level: ''
     },
     mutations: {
-        jianCeDuiXiangIdSet(state, jianCeDuiXiang) {
-            state.jianCeDuiXiangId = jianCeDuiXiang.jianCeDuiXiangId || ''
-        },
-        myformSet(state, myform) {
+        myformSet (state, myform) {
             state.myform = myform.myform || ''
         },
-        jianCeCanShuIdSet(state, jianCeCanShu) {
-            state.jianCeCanShuId = jianCeCanShu.jianCeCanShuId || ''
-        },
-        usersList(state, data) {
+        usersList (state, data) {
             state.usersList = data.length ? data : []
+        },
+        level (state, data) {
+            state.level = data || ''
         }
     },
     actions: {
-        setUsersList({ commit }, data){
+        setUsersList ({ commit }, data) {
             commit('usersList', data)
+        },
+        setLevel ({ commit }, data) {
+            console.log(data)
+            commit('level', data)
         }
     }
 }

+ 296 - 290
src/store/modules/ibps/modules/user.js

@@ -3,302 +3,308 @@ import { getToken, getUuid } from '@/utils/auth'
 import Utils from '@/utils/util'
 
 export default {
-  namespaced: true,
-  state: {
-    // 用户信息
-    info: {},
-    // 帐号
-    account: '',
-    // 切换的账号
-    switchAccount: '',
-    // 设置的关联租户ID
-    designTenantid: '',
-    // 是否开启注册
-    regOpen: false
-  },
-  actions: {
-    /**
-     * @description 设置用户数据
-     * @param {Object} context
-     * @param {*} info info
-     */
-    async set({ state, dispatch }, info) {
-      // store 赋值
-      state.info = info
-      // 持久化
-      await dispatch('ibps/db/set', {
-        dbName: 'sys',
-        path: 'user.info',
-        value: info,
-        user: true
-      }, { root: true })
+    namespaced: true,
+    state: {
+        // 用户信息
+        info: {},
+        // 帐号
+        account: '',
+        // 切换的账号
+        switchAccount: '',
+        // 设置的关联租户ID
+        designTenantid: '',
+        // 是否开启注册
+        regOpen: false
     },
-    /**
-     * @description 从数据库取用户数据
-     * @param {Object} state vuex state
-     */
-    async get({ state, dispatch }) {
-      // store 赋值
-      state.info = await dispatch('ibps/db/get', {
-        dbName: 'sys',
-        path: 'user.info',
-        defaultValue: {},
-        user: true
-      }, { root: true })
-    },
-    /**
-     * @description 从数据库取用户数据
-     * @param {Object} context
-     */
-    async  load({ state, dispatch }) {
-      return new Promise(async(resolve, reject) => {
-        // 获取当前用户账号
-        await dispatch('getAccount')
-        // 获取切换用户账号
-        await dispatch('getSwitchAccount')
+    actions: {
+        /**
+         * @description 设置用户数据
+         * @param {Object} context
+         * @param {*} info info
+         */
+        async set ({ state, dispatch }, info) {
+            // store 赋值
+            state.info = info
+            // 持久化
+            await dispatch('ibps/db/set', {
+                dbName: 'sys',
+                path: 'user.info',
+                value: info,
+                user: true
+            }, { root: true })
+        },
+        /**
+         * @description 从数据库取用户数据
+         * @param {Object} state vuex state
+         */
+        async get ({ state, dispatch }) {
+            // store 赋值
+            state.info = await dispatch('ibps/db/get', {
+                dbName: 'sys',
+                path: 'user.info',
+                defaultValue: {},
+                user: true
+            }, { root: true })
+        },
+        /**
+         * @description 从数据库取用户数据
+         * @param {Object} context
+         */
+        async load ({ state, dispatch }) {
+            return new Promise(async (resolve, reject) => {
+                // 获取当前用户账号
+                await dispatch('getAccount')
+                // 获取切换用户账号
+                await dispatch('getSwitchAccount')
 
-        // 获取注册用户账号
-        dispatch('getRegister').then((r) => {
-          if (Utils.isEmpty(state.account)) {
-            reject()
-            return
-          }
-          // 获取用户信息
-          getUserInfo(state.account).then(async response => {
-            if (!response) {
-              reject(response)
+                // 获取注册用户账号
+                dispatch('getRegister').then((r) => {
+                    if (Utils.isEmpty(state.account)) {
+                        reject()
+                        return
+                    }
+                    // 获取用户信息
+                    getUserInfo(state.account).then(async response => {
+                        if (!response) {
+                            reject(response)
+                        }
+                        const info = response.data
+                        // 设置当前
+                        await dispatch('ibps/user/set', info, {
+                            root: true
+                        })
+                        if (info.positions && info.positions.length) {
+                            const level = [...new Set(info.positions.map(obj => obj.path ? obj.path.split('.')[0] : '').filter(Boolean))].join(',')
+                            await dispatch('ibps/param/setLevel', level, {
+                                root: true
+                            })
+                        }
+                        // 获取当前子系统
+                        await dispatch('ibps/system/loadSystem', null, {
+                            root: true
+                        })
+                        resolve(info)
+                    }).catch(error => {
+                        reject(error)
+                    })
+                }).catch(error => {
+                    reject(error)
+                })
+            })
+        },
+        listen ({ state, dispatch }) {
+            // 找到当前浏览器支持的hidden属性名和visibilitychange事件名
+            let hidden = 'hidden'
+            let visibilityChange = 'visibilitychange'
+            if (typeof document.hidden !== 'undefined') {
+                hidden = 'hidden'
+                visibilityChange = 'visibilitychange'
+            } else if (typeof document.mozHidden !== 'undefined') {
+                hidden = 'mozHidden'
+                visibilityChange = 'mozvisibilitychange'
+            } else if (typeof document.msHidden !== 'undefined') {
+                hidden = 'msHidden'
+                visibilityChange = 'msvisibilitychange'
+            } else if (typeof document.webkitHidden !== 'undefined') {
+                hidden = 'webkitHidden'
+                visibilityChange = 'webkitvisibilitychange'
             }
-            const info = response.data
-            // 设置当前
-            await dispatch('ibps/user/set', info, {
-              root: true
+            document.addEventListener(visibilityChange, () => {
+                const uuid = getUuid()
+                const userId = state.info && state.info.user ? state.info.user.id : ''
+                if (!document[hidden] && Utils.isNotEmpty(userId) && userId !== uuid) { // 显示
+                    location.reload()
+                }
+            }, false)
+        },
+        /**
+         * 获取用户名
+         * @param {*} param0
+         */
+        getAccount ({ state, dispatch }) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.account = await dispatch('ibps/db/get', {
+                    dbName: 'sys',
+                    path: 'account',
+                    defaultValue: '',
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
             })
-            // 获取当前子系统
-            await dispatch('ibps/system/loadSystem', null, {
-              root: true
+        },
+        setAccount ({
+            state,
+            dispatch
+        }, account) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.account = account
+                // 持久化
+                await dispatch('ibps/db/set', {
+                    dbName: 'sys',
+                    path: 'account',
+                    value: account,
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
             })
-            resolve(info)
-          }).catch(error => {
-            reject(error)
-          })
-        }).catch(error => {
-          reject(error)
-        })
-      })
-    },
-    listen({ state, dispatch }) {
-      // 找到当前浏览器支持的hidden属性名和visibilitychange事件名
-      let hidden = 'hidden'
-      let visibilityChange = 'visibilitychange'
-      if (typeof document.hidden !== 'undefined') {
-        hidden = 'hidden'
-        visibilityChange = 'visibilitychange'
-      } else if (typeof document.mozHidden !== 'undefined') {
-        hidden = 'mozHidden'
-        visibilityChange = 'mozvisibilitychange'
-      } else if (typeof document.msHidden !== 'undefined') {
-        hidden = 'msHidden'
-        visibilityChange = 'msvisibilitychange'
-      } else if (typeof document.webkitHidden !== 'undefined') {
-        hidden = 'webkitHidden'
-        visibilityChange = 'webkitvisibilitychange'
-      }
-      document.addEventListener(visibilityChange, () => {
-        const uuid = getUuid()
-        const userId = state.info && state.info.user ? state.info.user.id : ''
-        if (!document[hidden] && Utils.isNotEmpty(userId) && userId !== uuid) { // 显示
-          location.reload()
-        }
-      }, false)
-    },
-    /**
-     * 获取用户名
-     * @param {*} param0
-     */
-    getAccount({ state, dispatch }) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.account = await dispatch('ibps/db/get', {
-          dbName: 'sys',
-          path: 'account',
-          defaultValue: '',
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    setAccount({
-      state,
-      dispatch
-    }, account) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.account = account
-        // 持久化
-        await dispatch('ibps/db/set', {
-          dbName: 'sys',
-          path: 'account',
-          value: account,
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    /**
-     * 获取切换用户账号
-     * @param {*} param0
-     */
-    getSwitchAccount({ state, dispatch }) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.switchAccount = await dispatch('ibps/db/get', {
-          dbName: 'sys',
-          path: 'switchAccount',
-          defaultValue: '',
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    /**
-     * 设置切换用户账号
-     * @param {*} param0
-     * @param {*} switchAccount
-     */
-    setSwitchAccount({
-      state,
-      dispatch
-    }, switchAccount) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.switchAccount = switchAccount
-        // 持久化
-        await dispatch('ibps/db/set', {
-          dbName: 'sys',
-          path: 'switchAccount',
-          value: switchAccount,
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    /**
-     * 切换用户
-     * @param {*} param0
-     * @param {*} username
-     */
-    switchUser({
-      state,
-      dispatch
-    }, username) {
-      return new Promise(async(resolve, reject) => {
-        const switchAccount = state.account
-        let token = getToken()
-        if (Utils.isEmpty(token)) {
-          await dispatch('ibps/account/refreshToken', null, { root: true })
-          token = getToken()
-          if (Utils.isEmpty(token)) {
-            reject(token)
-            return
-          }
-        }
+        },
+        /**
+         * 获取切换用户账号
+         * @param {*} param0
+         */
+        getSwitchAccount ({ state, dispatch }) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.switchAccount = await dispatch('ibps/db/get', {
+                    dbName: 'sys',
+                    path: 'switchAccount',
+                    defaultValue: '',
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
+            })
+        },
+        /**
+         * 设置切换用户账号
+         * @param {*} param0
+         * @param {*} switchAccount
+         */
+        setSwitchAccount ({
+            state,
+            dispatch
+        }, switchAccount) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.switchAccount = switchAccount
+                // 持久化
+                await dispatch('ibps/db/set', {
+                    dbName: 'sys',
+                    path: 'switchAccount',
+                    value: switchAccount,
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
+            })
+        },
+        /**
+         * 切换用户
+         * @param {*} param0
+         * @param {*} username
+         */
+        switchUser ({
+            state,
+            dispatch
+        }, username) {
+            return new Promise(async (resolve, reject) => {
+                const switchAccount = state.account
+                let token = getToken()
+                if (Utils.isEmpty(token)) {
+                    await dispatch('ibps/account/refreshToken', null, { root: true })
+                    token = getToken()
+                    if (Utils.isEmpty(token)) {
+                        reject(token)
+                        return
+                    }
+                }
 
-        await switchUser({
-          username: username,
-          token: token
-        }).then(async response => {
-          const data = response.data
-          // 更新token信息
-          await dispatch('ibps/account/updataTokenInfo', data, { root: true })
-          // 更新用户信息
-          await dispatch('setAccount', username)
-          // 更新切换用户信息
-          await dispatch('setSwitchAccount', switchAccount)
-          // 清除子系统
-          // await dispatch('ibps/system/set', null, { root: true })
-          //  清除菜单
-          await dispatch('ibps/menu/menusSet', null, { root: true })
-          // 重置路由
-          // resetUrlRouter('/dashboard')
-          resolve(data)
-        }).catch(err => {
-          console.error('switchUser-err: ', err)
-          reject(err)
-        })
-      })
-    },
-    /**
-     * 退出切换
-     * @param {*} param0
-     */
-    exitSwitchUser({
-      state,
-      dispatch
-    }) {
-      return new Promise(async(resolve, reject) => {
-        const switchAccount = state.switchAccount
-        let token = getToken()
-        if (Utils.isEmpty(token)) {
-          await dispatch('ibps/account/refreshToken', null, { root: true })
-          token = getToken()
-          if (Utils.isEmpty(token)) {
-            reject(token)
-            return
-          }
-        }
-        await exitSwitchUser({
-          username: switchAccount,
-          token: token
-        }).then(async response => {
-          const data = response.data
-          // 更新token信息
-          await dispatch('ibps/account/updataTokenInfo', data, { root: true })
-          // 更新用户信息
-          await dispatch('setAccount', switchAccount)
-          // 更新切换用户信息
-          await dispatch('setSwitchAccount', '')
-          // 清除子系统
-          // await dispatch('ibps/system/set', null, { root: true })
-          //  清除菜单
-          await dispatch('ibps/menu/menusSet', null, { root: true })
+                await switchUser({
+                    username: username,
+                    token: token
+                }).then(async response => {
+                    const data = response.data
+                    // 更新token信息
+                    await dispatch('ibps/account/updataTokenInfo', data, { root: true })
+                    // 更新用户信息
+                    await dispatch('setAccount', username)
+                    // 更新切换用户信息
+                    await dispatch('setSwitchAccount', switchAccount)
+                    // 清除子系统
+                    // await dispatch('ibps/system/set', null, { root: true })
+                    //  清除菜单
+                    await dispatch('ibps/menu/menusSet', null, { root: true })
+                    // 重置路由
+                    // resetUrlRouter('/dashboard')
+                    resolve(data)
+                }).catch(err => {
+                    console.error('switchUser-err: ', err)
+                    reject(err)
+                })
+            })
+        },
+        /**
+         * 退出切换
+         * @param {*} param0
+         */
+        exitSwitchUser ({
+            state,
+            dispatch
+        }) {
+            return new Promise(async (resolve, reject) => {
+                const switchAccount = state.switchAccount
+                let token = getToken()
+                if (Utils.isEmpty(token)) {
+                    await dispatch('ibps/account/refreshToken', null, { root: true })
+                    token = getToken()
+                    if (Utils.isEmpty(token)) {
+                        reject(token)
+                        return
+                    }
+                }
+                await exitSwitchUser({
+                    username: switchAccount,
+                    token: token
+                }).then(async response => {
+                    const data = response.data
+                    // 更新token信息
+                    await dispatch('ibps/account/updataTokenInfo', data, { root: true })
+                    // 更新用户信息
+                    await dispatch('setAccount', switchAccount)
+                    // 更新切换用户信息
+                    await dispatch('setSwitchAccount', '')
+                    // 清除子系统
+                    // await dispatch('ibps/system/set', null, { root: true })
+                    //  清除菜单
+                    await dispatch('ibps/menu/menusSet', null, { root: true })
 
-          // 重置路由
-          // resetUrlRouter('/')
-          resolve(data)
-        }).catch(err => {
-          console.error('refreshAccessToken-err: ', err)
-          reject(err)
-        })
-      })
-    },
-    getRegister({
-      state
-    }) {
-      return new Promise(async(resolve, reject) => {
-        await getRegisterOpen().then(async response => {
-          const regOpen = response.data
-          state.regOpen = regOpen
-          resolve(regOpen)
-        }).catch(err => {
-          console.error('getRegisterInfo:', err)
-          reject(err)
-        })
-      })
-    },
-    /**
-     * @description 切换更新租户ID数据
-     * @param {Object} state vuex state
-     * @param {String} tenantid 租户ID
-     */
-    setTenantids({ state }, tenantid) {
-      state.info.tenantId = tenantid
-    },
-    setDesignTenantid({ state }, designTenantid) {
-      state.designTenantid = designTenantid
+                    // 重置路由
+                    // resetUrlRouter('/')
+                    resolve(data)
+                }).catch(err => {
+                    console.error('refreshAccessToken-err: ', err)
+                    reject(err)
+                })
+            })
+        },
+        getRegister ({
+            state
+        }) {
+            return new Promise(async (resolve, reject) => {
+                await getRegisterOpen().then(async response => {
+                    const regOpen = response.data
+                    state.regOpen = regOpen
+                    resolve(regOpen)
+                }).catch(err => {
+                    console.error('getRegisterInfo:', err)
+                    reject(err)
+                })
+            })
+        },
+        /**
+         * @description 切换更新租户ID数据
+         * @param {Object} state vuex state
+         * @param {String} tenantid 租户ID
+         */
+        setTenantids ({ state }, tenantid) {
+            state.info.tenantId = tenantid
+        },
+        setDesignTenantid ({ state }, designTenantid) {
+            state.designTenantid = designTenantid
+        }
     }
-  }
 }

+ 1 - 4
src/views/component/paramlist.vue

@@ -30,9 +30,7 @@
     },
     computed: {
      ...mapState('ibps/param', {
-       jianCeDuiXiangId: state => state.jianCeDuiXiangId,
-       myform: state => state.myform,
-       jianCeCanShuId: state => state.jianCeCanShuId
+       myform: state => state.myform
      }),
     },
     methods: {
@@ -72,7 +70,6 @@
 
         },
       myLink(val) {
-        this.$store.commit('ibps/param/jianCeCanShuIdSet', { jianCeCanShuId:val })
         this.openDataTemplateParamDialog(this.myform, {
           type:'param'
         })

+ 59 - 0
src/views/component/qrcodeed.vue

@@ -0,0 +1,59 @@
+<template>
+<div style="height:50vh;">
+   <div id="qrcode" ref="qrcode" style="margin-top:25vh;"></div>
+</div>
+
+</template>
+
+<script>
+import QRCode from 'qrcodejs2' // 引入qrcode
+export default {
+  name: "qrcode",
+  props: {
+    field: Object,
+    formData: {
+      type: Object,
+      default() {
+        return {}
+      }
+    },
+    readonly: {
+      type: Boolean,
+      default: false,
+    }
+  },
+
+  methods: {
+    qrcode() {
+      console.log(this.formData.changJingId)
+      let qrcode = new QRCode('qrcode', {
+        width: 132,
+        height: 132,
+        text: `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0aecf99696061a3&redirect_uri=https%3A%2F%2Fwww.szjyxt.com%2F%23%2Fziliao&response_type=code&scope=snsapi_base&state=${this.formData.changJingId}#wechat_redirect`,
+      //text: `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxea2c214ca5d25739&redirect_uri=https%3A%2F%2Fwww.szjyxt.com%2F%23%2Fziliao&response_type=code&scope=snsapi_base&state=${this.formData.changJingId}#wechat_redirect`,
+        colorDark: "#000000", //前景色
+        colorLight: "#FFFFFF", //背景色
+        correctLevel: QRCode.CorrectLevel.L,
+
+
+      })
+    },
+  },
+  mounted() {
+    let this_ = this;
+    console.log(QRCode)
+    this.$nextTick(() => {
+      setTimeout(() => {
+        this_.qrcode();
+      }, 0)
+    })
+  },
+}
+</script>
+
+<style scoped>
+#qrcode {
+  width: 100px;
+  height: 100px;
+}
+</style>

+ 163 - 150
src/views/platform/message/inner/detail/index.vue

@@ -1,80 +1,93 @@
 <template>
-  <el-form ref="form"
-           v-loading="loading"
-           :element-loading-text="$t('common.loading')"
-           :label-width="formLabelWidth"
-           class="inner-detail"
-           @submit.native.prevent>
-    <el-row>
-      <el-col :span="12">
-        <el-form-item label="主题:">
-          <div class="text-border">{{ form.subject }}</div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="创建时间:">
-          <div class="text-border">{{ form.createTime | dateFormat }}</div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="发送人:">
-          <div class="text-border">{{ form.ownerName }}</div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="消息类型:">
-          <div class="text-border">
-            <el-tag :type="form.messageType | optionsFilter(typeOptions, 'type')">{{
-              form.messageType | optionsFilter(typeOptions, 'label') }}</el-tag>
-          </div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="是否公告:"
-                      :hidden="type">
-          <div class="text-border">
-            <el-tag :type="form.isPublic | optionsFilter(publicOrCanreplyOptions, 'type')">{{
-              form.isPublic | optionsFilter(publicOrCanreplyOptions, 'label') }}</el-tag>
-          </div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="是否可回复:"
-                      :hidden="type">
-          <div class="text-border">
-            <el-tag :type="form.canreply | optionsFilter(publicOrCanreplyOptions, 'type')">{{
-              form.canreply | optionsFilter(publicOrCanreplyOptions, 'label') }}</el-tag>
-          </div>
-        </el-form-item>
-      </el-col>
-      <el-col :span="24">
-        <el-form-item label="消息内容:">
-          <span class="original-content"
-                v-html="$utils.formatText(form.content)" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="24">
-        <el-form-item label="附件:">
-          <ibps-attachment-selector v-model="form.fileMsg"
-                                    :download="!readonly"
-                                    :readonly="readonly"
-                                    multiple />
-        </el-form-item>
-      </el-col>
-      <!-- <el-col v-if="!inside" :span="24">
-        <el-form-item class="list">
-          <el-tabs v-model="activeName" class="detail" @tab-click="handleClick">
-            <el-tab-pane label="已回复信息列表" name="replied" style="height:300px;">
-              <reply-list :id="formId" ref="replyList" />
-            </el-tab-pane>
-            <el-tab-pane label="已读取人员列表" name="readed" style="height:300px;">
-              <readed-list :id="formId" ref="readedList" />
-            </el-tab-pane>
-          </el-tabs>
-        </el-form-item>
-      </el-col> -->
-    </el-row>
-  </el-form>
+    <el-form
+        ref="form"
+        v-loading="loading"
+        :element-loading-text="$t('common.loading')"
+        :label-width="formLabelWidth"
+        class="inner-detail"
+        @submit.native.prevent
+    >
+        <el-row>
+            <el-col :span="12">
+                <el-form-item label="主题:">
+                    <div class="text-border">{{ form.subject }}</div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="创建时间:">
+                    <div class="text-border">{{ form.createTime | dateFormat }}</div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="发送人:">
+                    <div class="text-border">{{ form.ownerName }}</div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="消息类型:">
+                    <div class="text-border">
+                        <el-tag :type="form.messageType | optionsFilter(typeOptions, 'type')">
+                            {{ form.messageType | optionsFilter(typeOptions, 'label') }}
+                        </el-tag>
+                    </div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item
+                    label="是否公告:"
+                    :hidden="type"
+                >
+                    <div class="text-border">
+                        <el-tag :type="form.isPublic | optionsFilter(publicOrCanreplyOptions, 'type')">
+                            {{ form.isPublic | optionsFilter(publicOrCanreplyOptions, 'label') }}
+                        </el-tag>
+                    </div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item
+                    label="是否可回复:"
+                    :hidden="type"
+                >
+                    <div class="text-border">
+                        <el-tag :type="form.canreply | optionsFilter(publicOrCanreplyOptions, 'type')">
+                            {{ form.canreply | optionsFilter(publicOrCanreplyOptions, 'label') }}
+                        </el-tag>
+                    </div>
+                </el-form-item>
+            </el-col>
+            <el-col :span="24">
+                <el-form-item label="消息内容:">
+                    <span
+                        class="original-content"
+                        v-html="$utils.formatText(form.content)"
+                    />
+                </el-form-item>
+            </el-col>
+            <el-col :span="24">
+                <el-form-item label="附件:">
+                    <ibps-attachment-selector
+                        v-model="form.fileMsg"
+                        :download="!readonly"
+                        :readonly="readonly"
+                        multiple
+                    />
+                </el-form-item>
+            </el-col>
+            <el-col v-if="!inside" :span="24">
+                <el-form-item class="list">
+                    <el-tabs v-model="activeName" class="detail" @tab-click="handleClick">
+                        <el-tab-pane label="已回复信息列表" name="replied" style="height:300px;">
+                            <reply-list :id="formId" ref="replyList" />
+                        </el-tab-pane>
+                        <el-tab-pane label="已读取人员列表" name="readed" style="height:300px;">
+                            <readed-list :id="formId" ref="readedList" />
+                        </el-tab-pane>
+                    </el-tabs>
+                </el-form-item>
+            </el-col>
+        </el-row>
+    </el-form>
 </template>
 
 <script>
@@ -85,93 +98,93 @@ import ReadedList from './readed-list'
 import ReplyList from './reply-list'
 
 export default {
-  components: {
-    ReadedList,
-    IbpsAttachmentSelector,
-    ReplyList
-  },
-  props: {
-    inside: {
-      type: Boolean,
-      default: false
+    components: {
+        ReadedList,
+        IbpsAttachmentSelector,
+        ReplyList
     },
-    visible: {
-      type: Boolean,
-      default: false
+    props: {
+        inside: {
+            type: Boolean,
+            default: false
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        readonly: {
+            type: Boolean,
+            default: false
+        },
+        id: String,
+        title: String,
+        type: String,
+        getform: () => { }
     },
-    readonly: {
-      type: Boolean,
-      default: false
+    data () {
+        return {
+            activeName: 'replied',
+            formLabelWidth: '120px',
+            typeOptions: typeOptions,
+            publicOrCanreplyOptions: publicOrCanreplyOptions,
+            loading: false,
+            form: {},
+            fileSrc: '',
+            fileTitle: ''
+        }
     },
-    id: String,
-    title: String,
-    type: String,
-    getform: () => { }
-  },
-  data() {
-    return {
-      activeName: 'replied',
-      formLabelWidth: '120px',
-      typeOptions: typeOptions,
-      publicOrCanreplyOptions: publicOrCanreplyOptions,
-      loading: false,
-      form: {},
-      fileSrc: '',
-      fileTitle: '',
-    }
-  },
-  computed: {
-    formId() {
-      return this.id
-    }
-  },
-  methods: {
-    handleClick(tab, event) {
-      this.$refs['readedList'].loadData()
+    computed: {
+        formId () {
+            return this.id
+        }
     },
-    /**
-     * 获取表单数据
-     */
-    getFormData() {
-      this.activeName = 'replied'
-      this.form = ''
-      this.loading = true
-      get({
-        innerMessageId: this.formId,
-        type: this.type // 是否为空值,来决定消息是否要已读:空就已读,非空就未读
-      }).then(response => {
-        this.form = response.data
-        if (this.$refs['replyList']) { this.$refs['replyList'].loadData() }
-        if (this.$refs['readedList']) { this.$refs['readedList'].loadData() }
-        this.fileSrc = this.form.fileMsg.src
-        this.fileTitle = this.form.fileMsg.title
-        this.loading = false
-        this.$emit('callback', true)
-      }).catch(() => {
-        this.loading = false
-      })
+    methods: {
+        handleClick (tab, event) {
+            this.$refs['readedList'].loadData()
+        },
+        /**
+         * 获取表单数据
+         */
+        getFormData () {
+            this.activeName = 'replied'
+            this.form = ''
+            this.loading = true
+            get({
+                innerMessageId: this.formId,
+                type: this.type // 是否为空值,来决定消息是否要已读:空就已读,非空就未读
+            }).then(response => {
+                this.form = response.data
+                if (this.$refs['replyList']) { this.$refs['replyList'].loadData() }
+                if (this.$refs['readedList']) { this.$refs['readedList'].loadData() }
+                this.fileSrc = this.form.fileMsg.src
+                this.fileTitle = this.form.fileMsg.title
+                this.loading = false
+                this.$emit('callback', true)
+            }).catch(() => {
+                this.loading = false
+            })
+        }
     }
-  }
 
 }
 </script>
 <style lang="scss">
 .inner-detail {
-  .original-content {
-    p {
-      margin: 0;
+    .original-content {
+        p {
+            margin: 0;
+        }
     }
-  }
 }
 
 .text-border {
-  color: #000000;
-  box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1), 0 0 0 0 rgba(0, 0, 0, 0.1),
-    0 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 0px 0 rgba(0, 0, 0, 0.1);
-  padding-left: 5px;
-  min-height: 38px;
-  font-size: 16px;
-  text-align: center;
-  width: 80%;
+    color: #000000;
+    box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1), 0 0 0 0 rgba(0, 0, 0, 0.1),
+        0 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 0px 0 rgba(0, 0, 0, 0.1);
+    padding-left: 5px;
+    min-height: 38px;
+    font-size: 16px;
+    text-align: center;
+    width: 80%;
 }
 </style>

+ 22 - 22
src/views/platform/message/inner/receive.vue

@@ -165,19 +165,19 @@ export default {
                             icon: 'ibps-icon-reply-all',
                             label: '回复',
                             hidden: function (row, index) {
-                                return (row.canreply === 0 || row.messageType === 'system' || row.messageType === 'bulletin' || row.subject==="文件发放通知")
+                                return (row.canreply === 0 || row.messageType === 'system' || row.messageType === 'bulletin' || row.subject === '文件发放通知')
                             }
                         },
                         {
                             key: 'remove',
                             hidden: function (row, index) {
-                                return (row.subject==="文件发放通知")
+                                return (row.subject === '文件发放通知')
                             }
                         },
                         {
                             key: 'detail',
                             hidden: function (row, index) {
-                                return (row.subject==="文件发放通知")
+                                return (row.subject === '文件发放通知')
                             }
                         }
                     ]
@@ -206,13 +206,13 @@ export default {
                 ActionUtils.handleListData(this, data)
                 Bus.$emit('getMessageCount', pageResult.totalCount ? pageResult.totalCount : 0)
                 this.loading = false
-            }).catch(err => {
+            }).catch(() => {
                 this.loading = false
             })
         },
         /**
-     * 获取格式化参数
-     */
+         * 获取格式化参数
+         */
         getSearcFormData () {
             return ActionUtils.formatParams(
                 this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {},
@@ -221,22 +221,22 @@ export default {
             )
         },
         /**
-     * 处理分页事件
-     */
+         * 处理分页事件
+         */
         handlePaginationChange (page) {
             ActionUtils.setPagination(this.pagination, page)
             this.loadData()
         },
         /**
-     * 处理排序
-     */
+         * 处理排序
+         */
         handleSortChange (sort) {
             ActionUtils.setSorts(this.sorts, sort)
             this.loadData()
         },
         /**
-     * 查询
-     */
+         * 查询
+         */
         search () {
             this.loadData()
         },
@@ -248,8 +248,8 @@ export default {
             this.title = '信息明细'
         },
         /**
-     * 处理按钮事件
-     */
+         * 处理按钮事件
+         */
         handleAction (command, position, selection, data) {
             switch (command) {
                 case 'search': // 查询
@@ -284,8 +284,8 @@ export default {
             }
         },
         /**
-     * 标记为已读
-     */
+         * 标记为已读
+         */
         handleAlreadyRead (ids) {
             markRead({ innerMessageIds: ids }).then(response => {
                 ActionUtils.success('标记已读成功')
@@ -293,23 +293,23 @@ export default {
             }).catch(() => { })
         },
         /**
-     * 处理回复
-     */
+         * 处理回复
+         */
         handleReply (id = '') {
             this.editId = id
             this.repliFormVisible = true
         },
         /**
-     * 处理明细
-     */
+         * 处理明细
+         */
         handleEdit (id = '', readonly) {
             this.editId = id
             this.readonly = readonly
             this.dialogFormVisible = true
         },
         /**
-     * 处理删除
-     */
+         * 处理删除
+         */
         handleRemove (ids) {
             remove({ innerMessageIds: ids }).then(response => {
                 ActionUtils.removeSuccessMessage()

+ 7 - 7
src/views/platform/message/inner/send.vue

@@ -23,18 +23,18 @@
                 <el-form-item label="主题:" prop="subject">
                     <el-input v-model="form.subject" />
                 </el-form-item>
-                <el-form-item label="消息类型:" prop="messageType">
+                <!-- <el-form-item label="消息类型:" prop="messageType">
                     <el-radio-group v-model="form.messageType" @input="handleChange">
                         <template v-for="item in typeOptions">
                             <el-radio v-if="item.value" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
                         </template>
                     </el-radio-group>
-                </el-form-item>
-                <el-form-item label="收人:" prop="receiverId">
+                </el-form-item> -->
+                <el-form-item label="收人:" prop="receiverId">
                     <ibps-employee-selector
                         :value="form.receiverId"
                         multiple
-                        placeholder="请选择接收用户"
+                        placeholder="请选择接收"
                         @input="handleInput"
                     />
                 </el-form-item>
@@ -45,12 +45,12 @@
                         @input="depNameInput"
                     />
                 </el-form-item> -->
-                <el-form-item label="收件部门:" prop="positionId">
+                <el-form-item label="接收部门:" prop="groupId">
                     <ibps-pos-selector
-                        :value="form.positionId"
+                        :value="form.groupId"
                         :multiple="true"
                         placeholder="请选择接收部门"
-                        @input="posNameInput"
+                        @input="depNameInput"
                     />
                 </el-form-item>
                 <el-form-item v-if="form.messageType !== 'bulletin'" label="是否可回复:" prop="canreply">

+ 4 - 0
src/views/platform/org/employee/edit/basic-info.vue

@@ -51,6 +51,10 @@
                     <el-input v-if="!readonly" v-model="formData.qq" clearable />
                     <span v-else>{{ formData.qq }}</span>
                 </el-form-item>
+                <el-form-item label="员工编号">
+                    <el-input v-if="!readonly" v-model="formData.jianDingZiGeZ" clearable />
+                    <span v-else>{{ formData.jianDingZiGeZ }}</span>
+                </el-form-item>
                 <el-form-item label="员工姓名" prop="name">
                     <el-input v-if="!readonly" v-model="formData.name" clearable />
                     <span v-else>{{ formData.name }}</span>

+ 4 - 4
src/views/system/dashboard/page.vue

@@ -573,26 +573,26 @@
                     attrs: {
                         size: 'mini',
                         type: 'primary',
-                        plain: true,
+                        plain: true
                     },
                     on: {
                         click: () => {
                             this.doNotShowToday()
                         }
                     }
-                }, '今日不再提示');
+                }, '今日不再提示')
                 const confirmBtn = h('el-button', {
                     attrs: {
                         size: 'mini',
                         type: 'success',
-                        plain: true,
+                        plain: true
                     },
                     on: {
                         click: () => {
                             this.infoMessage.close()
                         }
                     }
-                }, '确认');
+                }, '确认')
                 Object.keys(result).forEach(key => {
                     // msg.push(h('p', {style: {
                     //     'font-weight': 'bold',

+ 18 - 21
src/views/system/login/page.vue

@@ -5,9 +5,9 @@
                 <div class="weizhi">
                     <div class="logoTitle">
                         <!-- <h1 class="login-title1"> -->
-                            <!-- <img src="../../../assets/images/login/logo.jpg" class="logoImg" />
+                        <!-- <img src="../../../assets/images/login/logo.jpg" class="logoImg" />
                             金源信通 -->
-                        <img src="~@/assets/images/login/company.png" class="logo" />
+                        <img src="~@/assets/images/login/company.png" class="logo">
                         <!-- </h1> -->
                         <h1 class="login-title">医学实验室管理系统</h1>
                     </div>
@@ -30,7 +30,7 @@
             </el-main>
             <el-footer class="footerclass">
                 <div class="footerOutside">
-                    <hr />
+                    <hr>
                     <div><i class="el-icon-s-platform" /> 深圳市金源信通科技有限公司开发</div>
                 </div>
             </el-footer>
@@ -52,13 +52,13 @@ export default {
         // IbpsPluginLanguage,
         IbpsApiBaseUrlController
     },
-    data() {
+    data () {
         return {
             activeName: 'user'
         }
     },
     methods: {
-        handleLogin() {}
+        handleLogin () {}
     }
 }
 </script>
@@ -66,7 +66,7 @@ export default {
     .jbd-login-page-bg{
         min-width: 560px;
     }
-    @media (min-width: 1200px) {
+    // @media (min-width: 1200px) {
         h1{
             margin: 0 !important;
         }
@@ -91,17 +91,16 @@ export default {
             background-repeat: no-repeat;
             border-radius: 5%;
             box-sizing: border-box;
-            
+            background: rgba(255, 255, 255, 1);
         }
 
         .login-title {
             font-size: 44px;
             color: #01a39e;
-            
             // margin: 0 0 40px !important;
         }
         .logo {
-            width: 200px;
+            height: 50px;
             position: relative;
             // top: 5px;
             margin: 20px 0 20px;
@@ -117,7 +116,7 @@ export default {
             width: 80%;
         }
         .footerOutside{
-            font-size: 12px; 
+            font-size: 12px;
             text-align: right;
         }
         .mainWifi{
@@ -126,7 +125,7 @@ export default {
         .logoTitle{
             display: flex;
             align-items: center;
-            // margin-left: 50px;
+            margin-bottom: 40px;
         }
         .weizhi{
             position: absolute;
@@ -134,7 +133,7 @@ export default {
             transform: translateY(-50%);
             margin-left: 50px;
         }
-    }
+    // }
 
     /*在 992 和 1199 像素之间的屏幕里,中等屏幕,分辨率低的 PC*/
     @media (min-width: 992px) and (max-width: 1199px) {
@@ -163,17 +162,14 @@ export default {
             background-repeat: no-repeat;
             border-radius: 5%;
             box-sizing: border-box;
-            
         }
 
         .login-title {
-            font-size: 40px;
+            font-size: 44px;
             color: #01a39e;
-            
             // margin: 0 0 40px !important;
         }
         .logo {
-            width: 180px;
             position: relative;
             // top: 5px;
             margin: 20px 0 20px;
@@ -189,7 +185,7 @@ export default {
             width: 80%;
         }
         .footerOutside{
-            font-size: 12px; 
+            font-size: 12px;
             text-align: right;
         }
         .mainWifi{
@@ -198,7 +194,9 @@ export default {
         .logoTitle{
             display: flex;
             align-items: center;
-            // margin-left: 40px;
+            img {
+                height: 40px;
+            }
         }
         .weizhi{
             position: absolute;
@@ -235,7 +233,6 @@ export default {
             background-repeat: no-repeat;
             border-radius: 5%;
             box-sizing: border-box;
-            
         }
 
         .login-title {
@@ -244,7 +241,7 @@ export default {
             margin-bottom: 20px !important;
         }
         .logo {
-            width: 160px;
+            height: 40px;
             position: relative;
             // top: 5px;
             margin: 20px 0 20px;
@@ -260,7 +257,7 @@ export default {
             width: 80%;
         }
         .footerOutside{
-            font-size: 12px; 
+            font-size: 12px;
             text-align: right;
         }
         .mainWifi{

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio