Quellcode durchsuchen

首页过期事务处理优化、bug修复,体系运行记录盒查询条件拆分

cfort vor 2 Jahren
Ursprung
Commit
49cbedbd3e

+ 1 - 1
src/plugins/ibps/index.js

@@ -83,7 +83,7 @@ export default {
                 Vue.prototype.$reportPath = `${BASE_URL}demo/reportJsp/showReport.jsp?access_token=${getToken()}&rpx=${reportPath}/`
                 Vue.prototype.$getReportFile = downloadReport // 通过方法函数,拼接url,并将字符串格式化
                 Vue.prototype.$getSealUri = 'http://120.77.249.241:9999/no/getSealFile/' // 微签 回显获取文件地址
-                Vue.prototype.$getFileDow = `${process.env.VUE_APP_BASE_URL}ibps/platform/v3/file/download?attachmentId=` // 文件下载地址
+                Vue.prototype.$getFileDow = `${BASE_URL}ibps/platform/v3/file/download?attachmentId=` // 文件下载地址
                 clearInterval(timer) // 添加成功后即删除定时任务
             }
         }, 500)

+ 54 - 12
src/views/platform/bpmn/bpmInstHis/list.vue

@@ -256,9 +256,12 @@ export default {
                 ],
                 searchForm: {
                     forms: [
-                        { prop: 'Q^subject_^SL', label: '关键字:', itemWidth: 330, placeholder: '可输入年份/部门/表单名称/事务说明/编制人模糊查询' },
-                        { prop: 'Q^proc_def_name_^SL', label: '表单名称:', itemWidth: 150, placeholder: '请输入' },
-                        { prop: ['Q^end_time_^DL', 'Q^end_time_^DG'], label: '完成时间', fieldType: 'daterange', itemWidth: 220 }
+                        // { prop: 'Q^subject_^SL', label: '关键字', itemWidth: 330, placeholder: '可输入年份/部门/表单名称/事务说明/编制人模糊查询' },
+                        { prop: 'dept', label: '部门', itemWidth: 150, placeholder: '请输入', labelWidth: 50 },
+                        { prop: 'tableName', label: '表单名称', itemWidth: 150, placeholder: '请输入', labelWidth: 70 },
+                        { prop: 'desc', label: '事务说明', itemWidth: 150, placeholder: '请输入', labelWidth: 70 },
+                        { prop: 'createBy', label: '编制人', itemWidth: 150, placeholder: '请输入', labelWidth: 60 },
+                        { prop: ['Q^end_time_^DL', 'Q^end_time_^DG'], label: '完成时间', fieldType: 'daterange', labelWidth: 70, itemWidth: 220 }
                     ]
                 },
                 // 表格字段配置
@@ -289,15 +292,15 @@ export default {
         const roleList = this.$store.getters.userInfo.role
         // 系统管理角色添加删除按钮
         const hasRole = roleList.some(item => item.name === '系统管理角色')
+        this.listConfig.toolbars.push({
+            key: 'detail',
+            label: '详情',
+            type: 'info'
+        })
         if (hasRole) {
             // 系统管理角色不做分类过滤
             // this.hasPermission = false
             const btn = [
-                {
-                    key: 'detail',
-                    label: '详情',
-                    type: 'info'
-                },
                 {
                     key: 'remove',
                     label: '删除',
@@ -511,7 +514,10 @@ export default {
         // 获取格式化参数
         getSearcFormData () {
             const temp = this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {}
-            const { parameters = [] } = ActionUtils.formatParams(temp) || {}
+            const parameters = this.getParams(temp) || []
+            // console.log(parameters)
+            const creator = parameters.filter(i => i.key.includes('create_by_'))
+            const others = parameters.filter(i => !i.key.includes('create_by_'))
             const params = {
                 parameters: [
                     {
@@ -524,12 +530,12 @@ export default {
                                         key: 'Q^status_^S',
                                         value: 'end'
                                     },
-                                    ...parameters
+                                    ...others
                                 ]
                             },
                             {
                                 relation: 'OR',
-                                parameters: []
+                                parameters: creator
                             }
                         ]
                     }
@@ -543,9 +549,45 @@ export default {
             if (this.$utils.isNotEmpty(this.typeId)) {
                 params.parameters[0].parameters[0].parameters.push({ key: 'Q^TYPE_ID_^S', value: this.typeId })
             }
-            params.parameters[0].parameters[1].parameters = this.userList.map(i => ({ key: 'Q^create_by_^S', value: i.userId, param: this.$utils.guid() }))
+            if (!creator.length) {
+                params.parameters[0].parameters[1].parameters = this.userList.map(i => ({ key: 'Q^create_by_^S', value: i.userId, param: this.$utils.guid() }))
+            }
             return params
         },
+        getParams (data) {
+            const result = []
+            const special = ['dept', 'tableName', 'desc', 'createBy']
+            Object.keys(data).forEach(key => {
+                if (special.includes(key)) {
+                    if (key === 'createBy') {
+                        // 转换用户ID
+                        const t = this.userList.filter(i => i.userName.includes(data[key]))
+                        if (!t.length) {
+                            result.push({ key: 'Q^create_by_^SL', value: data[key] })
+                        }
+                        const res = t.map(i => i.userId)
+                        res.forEach(i => {
+                            result.push({ key: 'Q^create_by_^SL', value: i })
+                        })
+                    } else if (key === 'dept') {
+                        // 转换部门ID
+                        const t = this.deptList.filter(i => i.positionName.includes(data[key]))
+                        if (!t.length) {
+                            result.push({ key: 'Q^subject_^SL', value: data[key] })
+                        }
+                        const res = t.map(i => i.positionId)
+                        res.forEach(i => {
+                            result.push({ key: 'Q^subject_^SL', value: i })
+                        })
+                    } else {
+                        result.push({ key: 'Q^subject_^SL', value: data[key] })
+                    }
+                } else {
+                    result.push({ key, value: data[key] })
+                }
+            })
+            return result.map(i => ({ ...i, param: this.$utils.guid() }))
+        },
         // 处理分页事件
         handlePaginationChange (page) {
             ActionUtils.setPagination(this.pagination, page)

+ 199 - 198
src/views/platform/org/org/detail/org-position/edit.vue

@@ -1,55 +1,55 @@
 <template>
-  <el-dialog
-    :title="title"
-    :visible.sync="dialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    class="dialog org-edit-dialog"
-    append-to-body
-    @open="getFormData"
-    @close="closeDialog"
-  >
-    <el-form
-      ref="form"
-      v-loading="dialogLoading"
-      :element-loading-text="$t('common.loading')"
-      :model="form"
-      :rules="rules"
-      :label-width="formLabelWidth"
-      @submit.native.prevent
+    <el-dialog
+        :title="title"
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        class="dialog org-edit-dialog"
+        append-to-body
+        @open="getFormData"
+        @close="closeDialog"
     >
-      <el-form-item label="岗位名称:" prop="name">
-        <el-input v-if="!readonly" v-model="form.name" v-pinyin="{vm:form,name:'name',key:'posAlias'}" />
-        <span v-else>{{ form.name }}</span>
-      </el-form-item>
-      <el-form-item label="岗位别名:" prop="posAlias">
-        <el-input v-if="!readonly" v-model="form.posAlias" :disabled="!$utils.isEmpty(formId)" />
-        <span v-else>{{ form.posAlias }}</span>
-      </el-form-item>
-      <el-form-item label="岗位等级:" prop="levelID">
-        <el-select v-if="!readonly" v-model="form.levelID" style="width:100%;">
-          <el-option v-for="(v,i) in levelOptions" :key="i" :label="v.name" :value="v.id" />
-        </el-select>
-        <span v-else> {{ form.levelID|optionsFilter(levelOptions,'name','id') }}</span>
-      </el-form-item>
-      <el-form-item label="岗位说明:" prop="desc">
-        <el-input v-if="!readonly" v-model="form.desc" type="textarea" />
-        <pre v-else class="ibps-m-0">{{ form.desc }}</pre>
-      </el-form-item>
-      <el-form-item v-if="readonly" label="创建时间:">
-        <span>{{ form.createTime }}</span>
-      </el-form-item>
-      <el-form-item v-if="readonly" label="更新时间:">
-        <span>{{ form.updateTime }}</span>
-      </el-form-item>
-    </el-form>
-    <div slot="footer" class="el-dialog--center">
-      <ibps-toolbar
-        :actions="toolbars"
-        @action-event="handleActionEvent"
-      />
-    </div>
-  </el-dialog>
+        <el-form
+            ref="form"
+            v-loading="dialogLoading"
+            :element-loading-text="$t('common.loading')"
+            :model="form"
+            :rules="rules"
+            :label-width="formLabelWidth"
+            @submit.native.prevent
+        >
+            <el-form-item label="岗位名称:" prop="name">
+                <el-input v-if="!readonly" v-model="form.name" v-pinyin="{vm:form,name:'name',key:'posAlias'}" />
+                <span v-else>{{ form.name }}</span>
+            </el-form-item>
+            <el-form-item label="岗位别名:" prop="posAlias">
+                <el-input v-if="!readonly" v-model="form.posAlias" :disabled="!$utils.isEmpty(formId)" />
+                <span v-else>{{ form.posAlias }}</span>
+            </el-form-item>
+            <el-form-item label="岗位等级:" prop="levelID">
+                <el-select v-if="!readonly" v-model="form.levelID" style="width:100%;">
+                    <el-option v-for="(v,i) in levelOptions" :key="i" :label="v.name" :value="v.id" />
+                </el-select>
+                <span v-else> {{ form.levelID|optionsFilter(levelOptions,'name','id') }}</span>
+            </el-form-item>
+            <el-form-item label="岗位说明:" prop="desc">
+                <el-input v-if="!readonly" v-model="form.desc" type="textarea" />
+                <pre v-else class="ibps-m-0">{{ form.desc }}</pre>
+            </el-form-item>
+            <el-form-item v-if="readonly" label="创建时间:">
+                <span>{{ form.createTime }}</span>
+            </el-form-item>
+            <el-form-item v-if="readonly" label="更新时间:">
+                <span>{{ form.updateTime }}</span>
+            </el-form-item>
+        </el-form>
+        <div slot="footer" class="el-dialog--center">
+            <ibps-toolbar
+                :actions="toolbars"
+                @action-event="handleActionEvent"
+            />
+        </div>
+    </el-dialog>
 </template>
 
 <script>
@@ -58,165 +58,166 @@ import { findByType as findLevelByType } from '@/api/platform/org/level'
 import ActionUtils from '@/utils/action'
 
 export default {
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
+    props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        readonly: {
+            type: Boolean,
+            default: false
+        },
+        orgId: String,
+        id: String,
+        title: String
     },
-    readonly: {
-      type: Boolean,
-      default: false
-    },
-    orgId: String,
-    id: String,
-    title: String
-  },
-  data() {
-    return {
-      formName: 'form',
-      formLabelWidth: '120px',
-      dialogVisible: this.visible,
-      dialogLoading: false,
+    data () {
+        return {
+            formName: 'form',
+            formLabelWidth: '120px',
+            dialogVisible: this.visible,
+            dialogLoading: false,
 
-      levelOptions: [],
-      defaultForm: {},
-      form: {
-        name: '',
-        posAlias: '',
-        levelID: '',
-        desc: '',
-        id: '',
-        orgID: ''
-      },
-      rules: {
-        name: [
-          { required: true, message: this.$t('validate.required') }
-        ],
-        posAlias: [{ required: true, message: this.$t('validate.required') }],
-        levelID: [
-          { required: true, message: this.$t('validate.required') }
-        ]
-      },
-      toolbars: [
-        { key: 'save', hidden: () => { return this.readonly } },
-        { key: 'cancel' }
-      ]
-    }
-  },
-  computed: {
-    formId() {
-      return this.id
-    }
-  },
-  watch: {
-    visible: {
-      handler: function(val, oldVal) {
-        this.dialogVisible = this.visible
-      },
-      immediate: true
-    }
-  },
-  created() {
-    this.defaultForm = JSON.parse(JSON.stringify(this.form))
-    this.loadLevelList()
-  },
-  methods: {
-    loadLevelList() {
-      findLevelByType({
-        type: 'position'
-      }).then(response => {
-        this.levelOptions = response.data
-        if (this.$utils.isNotEmpty(this.levelOptions)) {
-          this.defaultForm.levelID = this.levelOptions[0].id
-          if (this.$utils.isEmpty(this.formId)) {
-            this.form.levelID = this.defaultForm.levelID
-          }
+            levelOptions: [],
+            defaultForm: {},
+            form: {
+                name: '',
+                posAlias: '',
+                levelID: '',
+                desc: '',
+                id: '',
+                orgID: ''
+            },
+            rules: {
+                name: [
+                    { required: true, message: this.$t('validate.required') }
+                ],
+                posAlias: [{ required: true, message: this.$t('validate.required') }],
+                levelID: [
+                    { required: true, message: this.$t('validate.required') }
+                ]
+            },
+            toolbars: [
+                { key: 'save', hidden: () => { return this.readonly } },
+                { key: 'cancel' }
+            ]
         }
-      })
     },
-    handleActionEvent({ key }) {
-      switch (key) {
-        case 'save':
-          this.handleSave()
-          break
-        case 'cancel':
-          this.closeDialog()
-          break
-        default:
-          break
-      }
-    },
-    // 保存数据
-    handleSave() {
-      this.$refs[this.formName].validate(valid => {
-        if (valid) {
-          this.saveData()
-        } else {
-          ActionUtils.saveErrorMessage()
+    computed: {
+        formId () {
+            return this.id
         }
-      })
-    },
-    // 提交保存数据
-    saveData() {
-      this.form.orgID = this.orgId
-      save(this.form).then(response => {
-        this.$emit('callback', this)
-        ActionUtils.saveSuccessMessage(response.message, (rtn) => {
-          if (this.$utils.isEmpty(this.formId)) {
-            this.$refs[this.formName].resetFields()
-          }
-          if (rtn) {
-            this.closeDialog()
-          }
-        })
-      }).catch((err) => {
-        console.error(err)
-      })
     },
-    // 关闭当前窗口
-    closeDialog() {
-      this.$emit('close', false)
-      this.$refs[this.formName].resetFields()
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+            },
+            immediate: true
+        }
     },
-    /**
-     * 表单验证
-     */
-    formValidate() {
-      if (this.readonly) return
-      this.$nextTick(() => {
-        this.$refs[this.formName].validate(() => {})
-      })
+    created () {
+        this.defaultForm = JSON.parse(JSON.stringify(this.form))
+        this.loadLevelList()
     },
-    /**
-     * 获取表单数据
-     */
-    getFormData() {
-      if (this.$utils.isEmpty(this.formId)) {
-        // 重置表单
-        this.form = JSON.parse(JSON.stringify(this.defaultForm))
-        this.form.orgID = this.orgId
-        this.formValidate()
-        return
-      }
-      this.dialogLoading = true
-      get({
-        positionId: this.formId
-      }).then(response => {
-        this.form = response.data
-        this.formValidate()
-        this.dialogLoading = false
-      }).catch(() => {
-        this.dialogLoading = false
-      })
+    methods: {
+        loadLevelList () {
+            findLevelByType({
+                type: 'position'
+            }).then(response => {
+                this.levelOptions = response.data
+                if (this.$utils.isNotEmpty(this.levelOptions)) {
+                    this.defaultForm.levelID = this.levelOptions[0].id
+                    if (this.$utils.isEmpty(this.formId)) {
+                        this.form.levelID = this.defaultForm.levelID
+                    }
+                }
+            })
+        },
+        handleActionEvent ({ key }) {
+            switch (key) {
+                case 'save':
+                    this.handleSave()
+                    break
+                case 'cancel':
+                    this.closeDialog()
+                    break
+                default:
+                    break
+            }
+        },
+        // 保存数据
+        handleSave () {
+            this.$refs[this.formName].validate(valid => {
+                if (valid) {
+                    this.saveData()
+                } else {
+                    ActionUtils.saveErrorMessage()
+                }
+            })
+        },
+        // 提交保存数据
+        saveData () {
+            this.form.orgID = this.orgId
+            save(this.form).then(response => {
+                this.$emit('callback', this)
+                const newMsg = response.message ? response.message.replace('岗位', '部门') : ''
+                ActionUtils.saveSuccessMessage(newMsg, (rtn) => {
+                    if (this.$utils.isEmpty(this.formId)) {
+                        this.$refs[this.formName].resetFields()
+                    }
+                    if (rtn) {
+                        this.closeDialog()
+                    }
+                })
+            }).catch((err) => {
+                console.error(err)
+            })
+        },
+        // 关闭当前窗口
+        closeDialog () {
+            this.$emit('close', false)
+            this.$refs[this.formName].resetFields()
+        },
+        /**
+         * 表单验证
+         */
+        formValidate () {
+            if (this.readonly) return
+            this.$nextTick(() => {
+                this.$refs[this.formName].validate(() => {})
+            })
+        },
+        /**
+         * 获取表单数据
+         */
+        getFormData () {
+            if (this.$utils.isEmpty(this.formId)) {
+                // 重置表单
+                this.form = JSON.parse(JSON.stringify(this.defaultForm))
+                this.form.orgID = this.orgId
+                this.formValidate()
+                return
+            }
+            this.dialogLoading = true
+            get({
+                positionId: this.formId
+            }).then(response => {
+                this.form = response.data
+                this.formValidate()
+                this.dialogLoading = false
+            }).catch(() => {
+                this.dialogLoading = false
+            })
+        }
     }
-  }
 
 }
 </script>
 <style lang="scss">
-.org-edit-dialog{
-  .el-dialog__body{
-    height:  calc(50vh - 277px) !important;
-  }
-}
+    .org-edit-dialog{
+        .el-dialog__body{
+            height:  calc(50vh - 277px) !important;
+        }
+    }
 </style>

+ 194 - 193
src/views/platform/org/position/edit.vue

@@ -1,49 +1,49 @@
 <template>
-  <div>
-    <div v-if="readonly">
-      <el-form :label-width="formLabelWidth" @submit.native.prevent>
-        <el-form-item label="部门名称:" prop="name">
-          <span>{{ position.name }}</span>
-        </el-form-item>
-        <el-form-item label="部门别名:" prop="posAlias">
-          <span>{{ position.posAlias }}</span>
-        </el-form-item>
-        <el-form-item label="部门等级:" prop="level">
-          {{ position.levelID|optionsFilter(levelOptions,'label') }}
-        </el-form-item>
-        <el-form-item label="部门说明:" prop="desc">
-          <pre class="ibps-m-0">{{ position.desc }}</pre>
-        </el-form-item>
-        <el-form-item label="创建时间:" prop="createTime">
-          {{ position.createTime }}
-        </el-form-item>
-        <el-form-item label="更新时间:" prop="updateTime">
-          {{ position.updateTime }}
-        </el-form-item>
-      </el-form>
+    <div>
+        <div v-if="readonly">
+            <el-form :label-width="formLabelWidth" @submit.native.prevent>
+                <el-form-item label="部门名称:" prop="name">
+                    <span>{{ position.name }}</span>
+                </el-form-item>
+                <el-form-item label="部门别名:" prop="posAlias">
+                    <span>{{ position.posAlias }}</span>
+                </el-form-item>
+                <el-form-item label="部门等级:" prop="level">
+                    {{ position.levelID|optionsFilter(levelOptions,'label') }}
+                </el-form-item>
+                <el-form-item label="部门说明:" prop="desc">
+                    <pre class="ibps-m-0">{{ position.desc }}</pre>
+                </el-form-item>
+                <el-form-item label="创建时间:" prop="createTime">
+                    {{ position.createTime }}
+                </el-form-item>
+                <el-form-item label="更新时间:" prop="updateTime">
+                    {{ position.updateTime }}
+                </el-form-item>
+            </el-form>
+        </div>
+        <ibps-container v-else type="full" header-background-color class="page">
+            <template slot="header">
+                <el-button type="primary" icon="ibps-icon-save" @click="handleSave()">保存</el-button>
+            </template>
+            <el-form ref="positionForm" :model="position" :rules="rules" :label-width="formLabelWidth">
+                <el-form-item label="部门名称" prop="name">
+                    <el-input v-model="position.name" v-pinyin="{vm:position,key:'posAlias'}" autocomplete="off" :disabled="reading" />
+                </el-form-item>
+                <el-form-item label="部门别名" prop="posAlias">
+                    <el-input v-model="position.posAlias" :disabled="formId!==''||reading" autocomplete="off" />
+                </el-form-item>
+                <el-form-item label="部门等级" prop="levelID">
+                    <el-select v-model="position.levelID" style="width:100%;" :disabled="reading" @focus="getWidth">
+                        <el-option v-for="(v,i) in levelOptions" :key="i" :label="v.label" :value="v.value" :style="{'max-width':optionsWidth}" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="部门说明" prop="desc">
+                    <el-input v-model="position.desc" :rows="4" type="textarea" :disabled="reading" />
+                </el-form-item>
+            </el-form>
+        </ibps-container>
     </div>
-    <ibps-container v-else type="full" header-background-color class="page">
-      <template slot="header">
-        <el-button type="primary" icon="ibps-icon-save" @click="handleSave()">保存</el-button>
-      </template>
-      <el-form ref="positionForm" :model="position" :rules="rules" :label-width="formLabelWidth">
-        <el-form-item label="部门名称" prop="name">
-          <el-input v-model="position.name" v-pinyin="{vm:position,key:'posAlias'}" autocomplete="off" :disabled="reading" />
-        </el-form-item>
-        <el-form-item label="部门别名" prop="posAlias">
-          <el-input v-model="position.posAlias" :disabled="formId!==''||reading" autocomplete="off" />
-        </el-form-item>
-        <el-form-item label="部门等级" prop="levelID">
-          <el-select v-model="position.levelID" style="width:100%;" :disabled="reading" @focus="getWidth">
-            <el-option v-for="(v,i) in levelOptions" :key="i" :label="v.label" :value="v.value" :style="{'max-width':optionsWidth}" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="部门说明" prop="desc">
-          <el-input v-model="position.desc" :rows="4" type="textarea" :disabled="reading" />
-        </el-form-item>
-      </el-form>
-    </ibps-container>
-  </div>
 </template>
 <script>
 import { save, get } from '@/api/platform/org/position'
@@ -52,161 +52,162 @@ import ActionUtils from '@/utils/action'
 import { validateKey, validateEmpty } from '@/utils/validate'
 
 export default {
-  props: {
-    id: [String, Number],
-    orgId: [String, Number],
-    parentId: [String, Number],
-    readonly: {
-      type: Boolean,
-      default: false
+    props: {
+        id: [String, Number],
+        orgId: [String, Number],
+        parentId: [String, Number],
+        readonly: {
+            type: Boolean,
+            default: false
+        },
+        levelId: [String, Number]
     },
-    levelId: [String, Number]
-  },
-  data() {
-    return {
-      formName: 'positionForm',
-      formLoading: false,
-      formLabelWidth: '120px',
-      formId: '',
-      clientHeight: '',
-      optionsWidth: '',
-      levelOptions: [],
-      defaultForm: {},
-      position: {
-        id: '',
-        parentId: '',
-        name: '',
-        posAlias: '',
-        levelID: '',
-        orgID: '',
-        status: 'actived',
-        state: '',
-        createTime: '',
-        updateTime: ''
-      },
-      rules: {
-        name: [{ required: true, message: this.$t('validate.required') },
-          { validator: validateEmpty, trigger: 'blur' },
-          { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
-        posAlias: [{ required: true, validator: validateKey },
-          { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
-        levelID: [{ required: true, message: this.$t('validate.required') }],
-        status: [{ required: true, message: this.$t('validate.required') }]
-      },
-      reading: false
-    }
-  },
-  // 监听
-  watch: {
-    id: {
-      handler: function(val, oldVal) {
-        this.formId = this.id || ''
-        this.getFormData()
-      },
-      immediate: true
-    },
-    position: {
-      handler: function(val, oldVal) {
-        var pattern = /\s/
-        if (pattern.test(val.name)) {
-          if (pattern.test(val.posAlias)) {
-            val.posAlias = ''
-          }
+    data () {
+        return {
+            formName: 'positionForm',
+            formLoading: false,
+            formLabelWidth: '120px',
+            formId: '',
+            clientHeight: '',
+            optionsWidth: '',
+            levelOptions: [],
+            defaultForm: {},
+            position: {
+                id: '',
+                parentId: '',
+                name: '',
+                posAlias: '',
+                levelID: '',
+                orgID: '',
+                status: 'actived',
+                state: '',
+                createTime: '',
+                updateTime: ''
+            },
+            rules: {
+                name: [{ required: true, message: this.$t('validate.required') },
+                    { validator: validateEmpty, trigger: 'blur' },
+                    { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
+                posAlias: [{ required: true, validator: validateKey },
+                    { min: 1, max: 64, message: '长度不能超过64个字符', trigger: 'blur' }],
+                levelID: [{ required: true, message: this.$t('validate.required') }],
+                status: [{ required: true, message: this.$t('validate.required') }]
+            },
+            reading: false
         }
-      },
-      deep: true
-    }
-  },
-  created() {
-    this.defaultForm = JSON.parse(JSON.stringify(this.position))
-    this.loadLevelList()
-  },
-  methods: {
-    getWidth(even) {
-      this.optionsWidth = even.srcElement.clientWidth + 'px'
     },
-    loadLevelList() {
-      findLevelByType({
-        type: 'position'
-      }).then(response => {
-        const data = JSON.parse(JSON.stringify(response.data))
-        this.levelOptions = data.map(item => {
-          return {
-            value: item.id,
-            label: item.name
-          }
-        })
-        if (this.$utils.isNotEmpty(this.levelOptions)) {
-          this.defaultForm.levelID = this.levelOptions[0].value
-          if (this.$utils.isEmpty(this.formId)) {
-            this.position.levelID = this.defaultForm.levelID
-          }
+    // 监听
+    watch: {
+        id: {
+            handler: function (val, oldVal) {
+                this.formId = this.id || ''
+                this.getFormData()
+            },
+            immediate: true
+        },
+        position: {
+            handler: function (val, oldVal) {
+                var pattern = /\s/
+                if (pattern.test(val.name)) {
+                    if (pattern.test(val.posAlias)) {
+                        val.posAlias = ''
+                    }
+                }
+            },
+            deep: true
         }
-      })
     },
-    // 保存数据
-    handleSave() {
-      this.$refs[this.formName].validate(valid => {
-        if (valid) {
-          this.saveData()
-        } else {
-          ActionUtils.saveErrorMessage()
-        }
-      })
+    created () {
+        this.defaultForm = JSON.parse(JSON.stringify(this.position))
+        this.loadLevelList()
     },
-    // 提交保存数据
-    saveData() {
-      const data = this.position
-      save(data).then(response => {
-        this.$emit('callback', this)
-        ActionUtils.saveSuccessMessage(response.message, (rtn) => {
-          if (this.$utils.isEmpty(this.formId)) {
-            this.$refs[this.formName].resetFields()
-            this.loadLevelList()
-          }
-          this.$emit('success', rtn)
-          if (rtn) {
-            this.reading = true
-          } else {
-            this.reading = false
-          }
-        })
-      }).catch((err) => {
-        console.error(err)
-      })
-    },
-    // 获取编辑数据
-    getFormData() {
-      if (this.$utils.isEmpty(this.formId)) {
-        // 页面渲染完后初始化表单
-        this.$nextTick(() => {
-          // 重置表单
-          this.position = JSON.parse(JSON.stringify(this.defaultForm))
-          this.position.parentId = this.parentId
-          this.position.orgID = this.orgId
-          this.formValidate()
-        })
-      } else {
-        this.formLoading = true
-        get({ positionId: this.formId }).then(response => {
-          this.position = response.data
-          if (!this.readonly) {
-            this.formValidate()
-          }
-          this.formLoading = false
-        }).catch(() => {
-          this.formLoading = false
-        })
-      }
-    },
-    /**
-     * 表单验证
-     */
-    formValidate() {
-      this.$nextTick(() => {
-        this.$refs[this.formName].validate(() => {})
-      })
+    methods: {
+        getWidth (even) {
+            this.optionsWidth = even.srcElement.clientWidth + 'px'
+        },
+        loadLevelList () {
+            findLevelByType({
+                type: 'position'
+            }).then(response => {
+                const data = JSON.parse(JSON.stringify(response.data))
+                this.levelOptions = data.map(item => {
+                    return {
+                        value: item.id,
+                        label: item.name
+                    }
+                })
+                if (this.$utils.isNotEmpty(this.levelOptions)) {
+                    this.defaultForm.levelID = this.levelOptions[0].value
+                    if (this.$utils.isEmpty(this.formId)) {
+                        this.position.levelID = this.defaultForm.levelID
+                    }
+                }
+            })
+        },
+        // 保存数据
+        handleSave () {
+            this.$refs[this.formName].validate(valid => {
+                if (valid) {
+                    this.saveData()
+                } else {
+                    ActionUtils.saveErrorMessage()
+                }
+            })
+        },
+        // 提交保存数据
+        saveData () {
+            const data = this.position
+            save(data).then(response => {
+                this.$emit('callback', this)
+                const newMsg = response.message ? response.message.replace('岗位', '部门') : ''
+                ActionUtils.saveSuccessMessage(newMsg, (rtn) => {
+                    if (this.$utils.isEmpty(this.formId)) {
+                        this.$refs[this.formName].resetFields()
+                        this.loadLevelList()
+                    }
+                    this.$emit('success', rtn)
+                    if (rtn) {
+                        this.reading = true
+                    } else {
+                        this.reading = false
+                    }
+                })
+            }).catch((err) => {
+                console.error(err)
+            })
+        },
+        // 获取编辑数据
+        getFormData () {
+            if (this.$utils.isEmpty(this.formId)) {
+                // 页面渲染完后初始化表单
+                this.$nextTick(() => {
+                    // 重置表单
+                    this.position = JSON.parse(JSON.stringify(this.defaultForm))
+                    this.position.parentId = this.parentId
+                    this.position.orgID = this.orgId
+                    this.formValidate()
+                })
+            } else {
+                this.formLoading = true
+                get({ positionId: this.formId }).then(response => {
+                    this.position = response.data
+                    if (!this.readonly) {
+                        this.formValidate()
+                    }
+                    this.formLoading = false
+                }).catch(() => {
+                    this.formLoading = false
+                })
+            }
+        },
+        /**
+         * 表单验证
+         */
+        formValidate () {
+            this.$nextTick(() => {
+                this.$refs[this.formName].validate(() => {})
+            })
+        }
     }
-  }
 }
 </script>

+ 58 - 84
src/views/system/dashboard/components/workbench.vue

@@ -21,8 +21,8 @@
                             @sort-change="handleSortChange"
                             @pagination-change="handlePaginationChange"
                         >
-                            <template slot="name" slot-scope="scope">{{ scope.row.subject | getWorkInfo('name') }}</template>
-                            <template slot="desc" slot-scope="scope">{{ scope.row.subject | getWorkInfo('desc') }}</template>
+                            <template slot="name" slot-scope="scope">{{ getWorkInfo(scope.row.subject, 'name') }}</template>
+                            <template slot="desc" slot-scope="scope">{{ getWorkInfo(scope.row.subject, 'desc') }}</template>
                             <!-- 待办字段处理 -->
                             <template slot="waitStatus" slot-scope="scope">{{ '待' + scope.row.name }}</template>
                             <template slot="stateLabel" slot-scope="scope">
@@ -124,14 +124,6 @@ export default {
     name: 'calendar',
     components: { BpmnFormrender, NewsDetail },
     filters: {
-        getWorkInfo (v, type) {
-            const res = {
-                name: v.split('#')[0],
-                // 无#返回空,有#返回(左边的字符串,
-                desc: v.split('#')[1] ? v.split('#')[1] : ''
-            }
-            return res[type]
-        },
         getUserName (v, list) {
             const user = list.find(i => i.userId === v)
             return user ? user.userName : ''
@@ -331,7 +323,6 @@ export default {
     },
     mounted () {
         this.getData(this.activeTab)
-        this.getOrgInfo()
         if (this.timer) {
             clearInterval(this.timer)
         }
@@ -349,23 +340,16 @@ export default {
         clearInterval(this.timer)
     },
     methods: {
-        // 获取用户部门信息
-        getOrgInfo () {
-            const { org = {}} = this.$store.getters
-            if (!org || !org.id) {
-                return
+        getWorkInfo (v, type) {
+            if (!v.includes('#')) {
+                return ''
             }
-            const params = {
-                parameters: [{ key: 'Q^MANAGER_ORG_ID_^S', value: org.id }]
+            const res = {
+                name: v.split('#')[0],
+                // 无#返回空,有#返回(左边的字符串,
+                desc: v.split('#')[1] ? v.split('#')[1] : ''
             }
-            queryOrgManager(params).then(res => {
-                this.orgInfo = {}
-                const data = res.data.dataResult
-                if (data && data.length) {
-                    const { id, name, mobile, account, gender, groupID } = data[0]
-                    this.orgInfo = { id, name, mobile, account, gender, groupID, orgName: org.name }
-                }
-            })
+            return res[type]
         },
         getName ({ createBy, updateBy }) {
             const id = updateBy || createBy
@@ -415,32 +399,31 @@ export default {
             const pageParams = this.pagination.page ? this.pagination : this.defaultPagination
             operate[this.activeTab](this.getFormatParams(null, pageParams)).then(response => {
                 const { dataResult, pageResult } = response.data
-                if (dataResult && dataResult.length) {
-                    // 待办事宜对任务发起人做额外处理
-                    if (type === 'wait') {
-                        const instList = []
-                        dataResult.forEach(item => {
-                            instList.push(item.bpmnInstId)
+                // 待办事宜对任务发起人做额外处理
+                if (type === 'wait') {
+                    const instList = []
+                    dataResult.forEach(item => {
+                        instList.push(item.bpmnInstId)
+                    })
+                    const sql = `select b.bpmn_inst_id_, b.create_by_, a.name_ from ibps_bpm_inst b left join ibps_party_employee a on a.id_ = b.create_by_ where b.bpmn_inst_id_ in (${instList.join(',')}) order by find_in_set(b.bpmn_inst_id_,'${instList.join(',')}')`
+                    const currentTime = Date.now()
+                    this.$common.request('sql', sql).then(res => {
+                        const data = res.variables && res.variables.data
+                        data.forEach((item, index) => {
+                            dataResult[index].submitBy = item.name_
+                            dataResult[index].workName = this.getWorkInfo(dataResult[index].subject, 'name')
+                            dataResult[index].workDesc = this.getWorkInfo(dataResult[index].subject, 'desc')
+                            dataResult[index].workType = this.plan.includes(dataResult[index].procDefKey) ? 'plan' : 'normal'
+                            const limit = this.getAttr(dataResult[index].subject, 'loseDate') || this.getAttr(dataResult[index].subject, 'timeLimit') || 3
+                            dataResult[index].state = this.judgeExpire(dataResult[index].createTime, currentTime, dataResult[index].workType, limit)
                         })
-                        const sql = `select b.bpmn_inst_id_, b.create_by_, a.name_ from ibps_bpm_inst b left join ibps_party_employee a on a.id_ = b.create_by_ where b.bpmn_inst_id_ in (${instList.join(',')}) order by find_in_set(b.bpmn_inst_id_,'${instList.join(',')}')`
-                        const currentTime = Date.now()
-                        this.$common.request('sql', sql).then(res => {
-                            const data = res.variables && res.variables.data
-                            data.forEach((item, index) => {
-                                dataResult[index].submitBy = item.name_
-                                dataResult[index].workName = dataResult[index].subject.includes('#') ? dataResult[index].subject.split('#')[0] : dataResult[index].subject.split('(')[0]
-                                dataResult[index].workType = this.plan.includes(dataResult[index].procDefKey) ? 'plan' : 'normal'
-                                const limit = this.getAttr(dataResult[index].subject, 'loseDate') || this.getAttr(dataResult[index].subject, 'timeLimit') || 3
-                                dataResult[index].state = this.judgeExpire(dataResult[index].createTime, currentTime, dataResult[index].workType, limit, '1')
-                            })
-                            this.dataList = dataResult.sort((a, b) => b.createTime.localeCompare(a.createTime))
-                            this.pagination = pageResult
-                        })
-                        this.urgeToManager()
-                    } else {
-                        this.dataList = dataResult
+                        this.dataList = dataResult.sort((a, b) => b.createTime.localeCompare(a.createTime))
                         this.pagination = pageResult
-                    }
+                    })
+                    this.urgeToManager()
+                } else {
+                    this.dataList = dataResult
+                    this.pagination = pageResult
                 }
                 this.loading = false
             }).catch(() => {
@@ -451,7 +434,7 @@ export default {
         updateList () {
             setTimeout(() => {
                 this.getData(this.activeTab)
-            }, 1000)
+            }, 500)
         },
         // 查询
         search () {
@@ -589,12 +572,13 @@ export default {
             // 筛选已过期数据
             workList.forEach(item => {
                 // 截取流程名
-                item.workName = item.subject.includes('#') ? item.subject.split('#')[0] : item.subject.split('(')[0]
+                item.workName = this.getWorkInfo(item.subject, 'name')
+                item.workDesc = this.getWorkInfo(item.subject, 'desc')
                 item.workType = this.plan.includes(item.procDefKey) ? 'plan' : 'normal'
                 item.deptId = this.getAttr(item.subject, 'dept')
+                item.state = this.judgeExpire(item.createTime, currentTime, item.workType, limit)
                 const limit = this.getAttr(item.subject, 'loseDate') || this.getAttr(item.subject, 'timeLimit')
-                const isExpire = this.judgeExpire(item.createTime, currentTime, item.workType, limit)
-                if (isExpire) {
+                if (['overtime', 'soon'].includes(item.state)) {
                     result.expire.push(item)
                 } else {
                     result.unexpire.push(item)
@@ -619,7 +603,7 @@ export default {
          * @param {string} limit 限时,值分为两种类型,传值为字符串格式的时间时,判定逻辑为当前时间小于该时间,传值为字符串类型数字时,判定逻辑为创建limit天后,大于当前时间
          * @param {string} isState 调用类型
          */
-        judgeExpire (time, current, type, limit, isState) {
+        judgeExpire (time, current, type, limit) {
             const D = new Date(time)
             const a = new Date(time).getTime()
             const b = new Date(current).getTime()
@@ -628,30 +612,19 @@ export default {
             const c = new Date(D.getFullYear(), D.getMonth() + 1, 0).getTime() + 86400000
             const isDate = l.toString().includes('-')
             // 返回办理状态
-            if (isState) {
-                let state = ''
-                if (type === 'plan') {
-                    const M = isDate ? new Date(l).getTime() : c
-                    state = b >= M ? 'overtime' : b + (86400000 * 7) > M ? 'soon' : 'wait'
-                } else {
-                    if (isDate) {
-                        const L = new Date(l).getTime()
-                        state = b >= L ? 'overtime' : 'wait'
-                    } else {
-                        state = a + (86400000 * parseInt(l)) < b ? 'overtime' : 'wait'
-                    }
-                }
-                return state
-            }
-            // 返回是否过期
-            if (isDate) {
-                return b + (86400000 * 7) > new Date(l).getTime()
-            }
+            let state = ''
             if (type === 'plan') {
-                return b + (86400000 * 7) > c
+                const M = isDate ? new Date(l).getTime() : c
+                state = b >= M ? 'overtime' : b + (86400000 * 7) > M ? 'soon' : 'wait'
             } else {
-                return a + (86400000 * parseInt(l)) < b
+                if (isDate) {
+                    const L = new Date(l).getTime()
+                    state = b >= L ? 'overtime' : 'wait'
+                } else {
+                    state = a + (86400000 * parseInt(l)) < b ? 'overtime' : 'wait'
+                }
             }
+            return state
         },
         // 处理已过期数据
         dealExpile (data, noticeList) {
@@ -661,12 +634,12 @@ export default {
             const addList = []
             const sendList = []
             const msgContent = {
-                plan: '距离超时还剩七天,请及时处理!',
-                normal: '至今三天未处理,已超时,请及时处理!'
+                soon: '即将超时,请及时处理!',
+                overtime: '已超时,请及时处理!'
             }
             const msgTitle = {
-                plan: '计划事务即将到期提醒',
-                normal: '事务超时提醒'
+                soon: '计划事务即将到期提醒',
+                overtime: '事务超时提醒'
             }
             const nowTime = new Date(new Date().getTime() + 28800000).toJSON().slice(0, 16).replace('T', ' ')
             data.forEach(item => {
@@ -679,7 +652,7 @@ export default {
                         // 完整名称
                         wan_zheng_ming_ch: item.subject,
                         // 事务说明
-                        shi_wu_shuo_ming_: item.subject.includes('#') ? item.subject.split('#')[1] : '',
+                        shi_wu_shuo_ming_: item.workDesc,
                         // 事务名称
                         shi_wu_ming_cheng: item.workName,
                         // 事务状态
@@ -696,12 +669,13 @@ export default {
                         bian_zhi_shi_jian: item.createTime,
                         ti_xing_ci_shu_: 1,
                         duan_xin_ci_shu_: 0,
-                        ti_xing_shi_jian_: nowTime
+                        ti_xing_shi_jian_: nowTime,
+                        guo_qi_zhuang_tai: item.state
                     }
                     addList.push(obj)
                     const msg = {
-                        subject: msgTitle[item.workType],
-                        content: `事务【${item.workName}】${msgContent[item.workType]}`,
+                        subject: msgTitle[item.state],
+                        content: `${item.workName}【${item.workDesc}】${msgContent[item.state]}`,
                         receiverId: userId,
                         canreply: '0',
                         taskId: item.taskId