Browse Source

表单、服务、流程

chenc 3 years ago
parent
commit
c81d6d5c8b

+ 1 - 1
public/index.html

@@ -242,7 +242,7 @@
   <!-- 全局配置 -->
   <script>
     window._CONFIG = {};
-    window._CONFIG['domianURL'] = 'http://127.0.0.1:8080/jeecg-boot';
+    window._CONFIG['domianURL'] = 'http://127.0.0.1:8090/jeecg-boot';
     window._CONFIG['casPrefixUrl'] = 'http://cas.example.org:8443/cas';
     window._CONFIG['onlinePreviewDomainURL'] = 'http://fileview.jeecg.com/onlinePreview'
     window._CONFIG['staticDomainURL'] = window._CONFIG['domianURL'] + '/sys/common/static';

BIN
public/logo-cd-history.png


BIN
public/logo-cd.png


+ 8 - 1
src/api/api.js

@@ -105,6 +105,11 @@ const duplicateCheck = (params)=>getAction("/sys/duplicate/check",params);
 // 加载分类字典
 const loadCategoryData = (params)=>getAction("/sys/category/loadAllData",params);
 const checkRuleByCode = (params) => getAction('/sys/checkRule/checkByCode', params)
+////表单编辑器数据
+//根据查询条件查询表数据
+const queryList=(params)=>getAction("/tbTableInfo/queryList",params)
+//修改
+const updateTbTableInfo=(params)=>putAction("/tbTableInfo/updateTbTableInfo",params)
 
 export {
   // imgView,
@@ -162,7 +167,9 @@ export {
   queryDeptRolePermission,
   saveDeptRolePermission,
   queryMyDepartTreeList,
-  tableList
+  tableList,
+  queryList,
+  updateTbTableInfo
 }
 
 

+ 8 - 0
src/api/manage.js

@@ -26,6 +26,14 @@ export function postFormAction(url,parameter) {
     params: parameter
   })
 }
+//post:data
+export function postFormAction2(url,parameter) {
+  return axios({
+    url: url,
+    method:'post' ,
+    data: parameter
+  })
+}
 
 //post method= {post | put}
 export function httpAction(url,parameter,method) {

BIN
src/assets/logo-cd-history.png


BIN
src/assets/logo-cd-left-history.png


BIN
src/assets/logo-cd-left.png


BIN
src/assets/logo-cd.png


+ 762 - 520
src/views/activiti/ProcessModelList.vue

@@ -4,7 +4,6 @@
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
-
           <a-col :md="6" :sm="8">
             <a-form-item label="流程名称">
               <a-input placeholder="请输入搜索关键词" v-model="queryParam.lcmc"></a-input>
@@ -17,7 +16,12 @@
           </a-col>
           <a-col :md="4" :sm="8">
             <a-form-item label="是否最新">
-              <a-switch checkedChildren="是" unCheckedChildren="否" defaultChecked v-model="queryParam.zx"/>
+              <a-switch
+                checkedChildren="是"
+                unCheckedChildren="否"
+                defaultChecked
+                v-model="queryParam.zx"
+              />
             </a-form-item>
           </a-col>
           <!--<a-col :md="6" :sm="10">
@@ -34,108 +38,157 @@
           </a-col>-->
 
           <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-            <a-col :md="8" :sm="12" >
-                <a-button type="primary"  style="left: 10px" @click="searchQuery" icon="search">查询</a-button>
-                <a-button type="primary"  @click="searchReset" icon="reload" style="margin-left: 8px;left: 10px">重置</a-button>
-                <a-button @click="editFormsOnline" style="margin-left: 8px;left: 10px;">在线编辑表单</a-button>
+            <a-col :md="8" :sm="12">
+              <a-button type="primary" style="left: 10px" @click="searchQuery" icon="search">查询</a-button>
+              <a-button
+                type="primary"
+                @click="searchReset"
+                icon="reload"
+                style="margin-left: 8px;left: 10px"
+              >重置</a-button>
+              <a-button @click="editFormsOnline" style="margin-left: 8px;left: 10px;">在线编辑表单</a-button>
             </a-col>
           </span>
           <span style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
-            <a-col :md="12" :sm="12" >
-<!--                <a-button type="primary"  style="left: 10px" @click="createObj.visible=true" icon="search">创建流程模型</a-button>-->
+            <a-col :md="12" :sm="12">
+              <!--                <a-button type="primary"  style="left: 10px" @click="createObj.visible=true" icon="search">创建流程模型</a-button>-->
             </a-col>
           </span>
-
         </a-row>
       </a-form>
     </div>
 
     <!-- table区域-begin -->
-    <a-table :scroll="{x:2000,y:500}" bordered
+    <a-table
+      :scroll="{x:2250,y:500}"
+      bordered
       ref="table"
-      size="middle"
+      size="small"
       rowKey="id"
       :dataSource="dataSource"
       :pagination="ipagination"
       :loading="loading"
-      @change="handleTableChange">
-
-      <a-table-column title="#" :width="50" fixed='left' key="a">
-        <template slot-scope="t,r,i" >
-          <span> {{i+1}} </span>
+      @change="handleTableChange"
+    >
+      <a-table-column title="#" :width="50" fixed="left" key="a">
+        <template slot-scope="t,r,i">
+          <span>{{i+1}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="流程名称" dataIndex="name" :width="200" align="center" fixed='left'>
+      <a-table-column title="流程名称" data-index="name" :width="200" align="center" fixed="left">
         <template slot-scope="t,r,i">
-          <span> {{t}} </span>
+          <span>{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="流程标识" dataIndex="processKey" :width="200" align="center">
+      <a-table-column title="流程标识" data-index="processKey" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <span> {{t}} </span>
+          <span>{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="版本" dataIndex="version" key="asa" :width="100" align="center"
-                       :sorter="(a, b) => a.version - b.version">
+      <a-table-column
+        title="版本"
+        data-index="version"
+        key="asa"
+        :width="100"
+        align="center"
+        :sorter="(a, b) => a.version - b.version"
+      >
         <template slot-scope="t,r,i">
-          <span> v.{{t}} </span>
+          <span>v.{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="所属分类" dataIndex="categoryId" :width="200" align="center" key="categoryId_"
-                      :filters = "lcTypeF" @filter="filter_categoryId">
+      <a-table-column
+        title="图标"
+        data-index="iconAddress"
+        key="iconAddress"
+        :width="100"
+        align="center"
+      >
         <template slot-scope="t,r,i">
-          <span> {{filterDictText(dictOptions, t)}} </span>
+          <span><a-avatar
+                        shape="square"
+                        :src="t"
+                      /></span>
         </template>
       </a-table-column>
-      <a-table-column title="流程图片" dataIndex="diagramName" :width="200" align="center">
+      <a-table-column
+        title="所属分类"
+        data-index="categoryId"
+        :width="200"
+        align="center"
+        key="categoryId_"
+        :filters="lcTypeF"
+        @filter="filter_categoryId"
+      >
+        <template slot-scope="t,r,i">
+          <span>{{filterDictText(dictOptions, t)}}</span>
+        </template>
+      </a-table-column>
+      <a-table-column title="流程图片" data-index="diagramName" :width="200" align="center">
         <template slot-scope="t,r,i">
           <span @click="showResource(r)" style="color: blue;cursor: pointer;">{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="表单路由" dataIndex="routeName" :width="200" align="center">
+      <a-table-column title="表单路由" data-index="routeName" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <span @click="viewForm(r)" style="color: blue;cursor: pointer;"> 
+          <span @click="viewForm(r)" style="color: blue;cursor: pointer;">
             <!-- {{getFormComponent(t).text}}  -->
             预览表单
-            </span>
+          </span>
         </template>
       </a-table-column>
-      <a-table-column title="状态" dataIndex="status" :width="200" align="center">
+      <a-table-column title="状态" data-index="status" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <span v-if="t==1" style="color: #00A0E9;"> 已启用 </span>
-          <span v-if="t!=1" style="color: #999;"> 未启用 </span>
+          <span v-if="t==1" style="color: #00A0E9;">已启用</span>
+          <span v-if="t!=1" style="color: #999;">未启用</span>
         </template>
       </a-table-column>
-      <a-table-column title="备注说明" dataIndex="description" :width="200" align="center">
+      <a-table-column title="备注说明" data-index="description" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <j-ellipsis :value="t" :length="10"/>
+          <j-ellipsis :value="t" :length="10" />
         </template>
       </a-table-column>
-      <a-table-column title="部署时间" dataIndex="createTime" :width="200" align="center">
+      <a-table-column title="部署时间" data-index="createTime" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <span> {{t}} </span>
+          <span>{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="更新时间" dataIndex="updateTime" :width="200" align="center">
+      <a-table-column title="更新时间" data-index="updateTime" :width="200" align="center">
         <template slot-scope="t,r,i">
-          <span> {{t}} </span>
+          <span>{{t}}</span>
         </template>
       </a-table-column>
-      <a-table-column title="操作" dataIndex=""  align="center" :width="250" fixed='right'>
+      <a-table-column title="操作" data-index align="center" :width="250" fixed="right">
         <template slot-scope="t,r,i">
-
-          <a href="javascript:void(0);" v-if="r.status!=1" @click="editStatus(1,r)" style="color: rgb(144,96,255);">启用</a>
-          <a href="javascript:void(0);" v-if="r.status==1" @click="editStatus(0,r)" style="color: #cb892d">禁用</a>
+          <a
+            href="javascript:void(0);"
+            v-if="r.status!=1"
+            @click="editStatus(1,r)"
+            style="color: rgb(144,96,255);"
+          >启用</a>
+          <a
+            href="javascript:void(0);"
+            v-if="r.status==1"
+            @click="editStatus(0,r)"
+            style="color: #cb892d"
+          >禁用</a>
           <a-divider type="vertical" />
-          <a href="javascript:void(0);" @click="getNodeData(r)" >节点设置</a>
+          <a href="javascript:void(0);" @click="getNodeData(r)">节点设置</a>
           <a-divider type="vertical" />
-          <a href="javascript:void(0);" @click="convertToModel(r)" >转为模型</a>
-          <br>
-          <a href="javascript:void(0);"  @click="edit(r)">编辑</a> <a-divider type="vertical" />
-          <a href="javascript:void(0);"  @click="editFrom(r)">编辑表单</a> <a-divider type="vertical" />
-          <a href="javascript:void(0);" style="color: red;" @click="remove(r)">删除</a>
+          <!-- <a href="javascript:void(0);" @click="convertToModel(r)" >转为模型</a> -->
 
+          <a href="javascript:void(0);" @click="edit(r)">编辑</a>
+          <a-divider type="vertical" />
+          <br />
+          <!-- 是自定义的表单才显示 -->
+          <a
+            v-if="r.routeName!=null&&r.routeName.indexOf('自定义')!=-1"
+            href="javascript:void(0);"
+            @click="editFrom(r)"
+          >编辑表单</a>
+          <a-divider v-if="r.routeName!=null&&r.routeName.indexOf('自定义')!=-1" type="vertical" />
 
+          <a href="javascript:void(0);" style="color: red;" @click="remove(r)">删除</a>
         </template>
       </a-table-column>
     </a-table>
@@ -149,32 +202,69 @@
       @cancel="editObj.visible = false"
     >
       <a-form :form="editForm" v-if="editObj.visible">
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="流程分类" >
-          <component :is="LcDict" :trigger-change="true" v-decorator="[ 'categoryId', {initialValue:editObj.categoryId, rules: [{ required: true, message: '不能为空' }] },]"
-                       placeholder="请选择流程分类" dictCode="bpm_process_type" ></component>
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="流程分类">
+          <component
+            :is="LcDict"
+            :trigger-change="true"
+            v-decorator="[ 'categoryId', {initialValue:editObj.categoryId, rules: [{ required: true, message: '不能为空' }] },]"
+            placeholder="请选择流程分类"
+            dictCode="bpm_process_type"
+          ></component>
         </a-form-item>
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="关联表单" >
-          <a-select @change="change_routeName" placeholder="请选择关联表单" :trigger-change="true" v-decorator="[ 'routeName', {initialValue:editObj.routeName, rules: [{ required: true, message: '不能为空' }] },]">
-            <a-select-option value="">请选择</a-select-option>
-            <a-select-option v-for="(item, i) in allFormComponent" :key="item.routeName" :value="item.routeName">
-              <span style="display: inline-block;width: 100%" :title=" item.text">
-                {{ item.text}}
-              </span>
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="关联表单">
+          <a-select
+            @change="change_routeName"
+            placeholder="请选择关联表单"
+            :trigger-change="true"
+            v-decorator="[ 'routeName', {initialValue:editObj.routeName, rules: [{ required: true, message: '不能为空' }] },]"
+          >
+            <a-select-option value>请选择</a-select-option>
+            <a-select-option
+              v-for="(item, i) in allFormComponent"
+              :key="item.routeName"
+              :value="item.routeName"
+            >
+              <span style="display: inline-block;width: 100%" :title=" item.text">{{ item.text}}</span>
             </a-select-option>
           </a-select>
           <!-- <a href="javascrip:void(0)" @click="viewForm">预览表单</a> -->
         </a-form-item>
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="角色授权" >
-          <j-select-role placeholder="不选择则所有人可用" v-decorator="[ 'roles', {initialValue:editObj.roles, rules: []}]"/>
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="图标">
+          <a-upload
+            name="avatar"
+            list-type="picture-card"
+            class="avatar-uploader"
+            :show-upload-list="false"
+            action="/jeecg-boot/sys/common/uploadFile"
+            @change="imgHandleChange"
+          >
+            <img v-if="imageUrl" :src="imageUrl" alt="avatar" />
+            <div v-else>
+              <a-icon type="plus" />
+              <div class="ant-upload-text">上传</div>
+            </div>
+          </a-upload>
+        </a-form-item>
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="角色授权">
+          <j-select-role
+            placeholder="不选择则所有人可用"
+            v-decorator="[ 'roles', {initialValue:editObj.roles, rules: []}]"
+          />
         </a-form-item>
-        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="备注描述" >
-          <a-textarea  v-decorator="[ 'description', {initialValue:editObj.description, rules: []}]" placeholder="备注描述" :autoSize="{ minRows: 3, maxRows: 5 }" />
+        <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="备注描述">
+          <a-textarea
+            v-decorator="[ 'description', {initialValue:editObj.description, rules: []}]"
+            placeholder="备注描述"
+            :autoSize="{ minRows: 3, maxRows: 5 }"
+          />
         </a-form-item>
       </a-form>
     </a-modal>
     <!--节点设置-->
     <a-modal
-      title="编辑流程节点" width="900px" :maskClosable="false"
+      title="编辑流程节点"
+      width="900px"
+      :maskClosable="false"
       :confirmLoading="confirmLoading"
       :visible="showProcessNodeEdit"
       :footer="null"
@@ -182,12 +272,16 @@
     >
       <a-row>
         <a-col :md="4" :sm="4" style="border-right: 1px solid #999">
-<!--          选择流程节点-->
+          <!--          选择流程节点-->
           <a-steps direction="vertical" :current="current" size="small">
-            <template  v-for="item,i in nodeList">
-              <a-step style="cursor: pointer;" :title="item.title"
-                      :description="item.description" :status="i==current?'process':'wait'"
-                      @click="change_steps(item,i)"/>
+            <template v-for="item,i in nodeList">
+              <a-step
+                style="cursor: pointer;"
+                :title="item.title"
+                :description="item.description"
+                :status="i==current?'process':'wait'"
+                @click="change_steps(item,i)"
+              />
             </template>
           </a-steps>
         </a-col>
@@ -195,20 +289,40 @@
           <a-alert message="温馨提示:若流程运行至未分配审批人员的审批节点时,流程将自动中断取消!" banner />
           <span></span>
           <a-form :form="nodeForm" v-if="showProcessNodeEdit">
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="节点名称" >
+            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="节点名称">
               <span class="nodespan">{{editNode.title}}</span>
             </a-form-item>
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="节点类型" >
+            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="节点类型">
               <span class="nodespan">{{dictNodeType[editNode.type]}}</span>
             </a-form-item>
+          <a-alert message="温馨提示:若每步流程填写表单的内容不同则需要选择关联表单,相同则不需要选择!" banner /><br/>
+          <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="关联表单">
+            <a-select
+              placeholder="请选择关联表单"
+              v-model="spry.tbTableInfoId"
+            >
+              <a-select-option
+                v-for="(item, i) in tableByBusinessTableList"
+                :key="item.id"
+                :value="item.id"
+              >
+                <span style="display: inline-block;width: 100%" :title="item.stepMemo">{{ item.stepMemo}}</span>
+              </a-select-option>
+            </a-select>
+          </a-form-item>
             <a-alert type="info" message="每个节点设置,如有修改都请保存一次,跳转节点后数据不会自动保存!" banner />
-            <br/>
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol"  label="审批人员" v-show="editNode.type==1">
-              <a-checkbox-group @change="spryType" v-model="spryTypes" >
-                  <!-- 0角色 1用户 2部门 3发起人 4发起人的部门负责人-->
-                <a-checkbox value="0"> 根据角色选择 </a-checkbox>
-                <a-checkbox value="1"> 直接选择人员 </a-checkbox>
-                <a-checkbox value="2"> 部门负责人 </a-checkbox>
+            <br />
+            <a-form-item
+              :label-col="labelCol"
+              :wrapper-col="wrapperCol"
+              label="审批人员"
+              v-show="editNode.type==1"
+            >
+              <a-checkbox-group @change="spryType" v-model="spryTypes">
+                <!-- 0角色 1用户 2部门 3发起人 4发起人的部门负责人-->
+                <a-checkbox value="0">根据角色选择</a-checkbox>
+                <a-checkbox value="1">直接选择人员</a-checkbox>
+                <a-checkbox value="2">部门负责人</a-checkbox>
                 <a-checkbox value="3">
                   发起人
                   <a-tooltip placement="topLeft" title="自动获取发起人">
@@ -217,518 +331,646 @@
                 </a-checkbox>
                 <a-checkbox value="4">
                   发起人的部门负责人
-                  <a-tooltip placement="topLeft" title="自动获取发起人所在部门的负责人,即其上级领导。(如果其本身就是部门负责人,则指向发起人自己。)">
+                  <a-tooltip
+                    placement="topLeft"
+                    title="自动获取发起人所在部门的负责人,即其上级领导。(如果其本身就是部门负责人,则指向发起人自己。)"
+                  >
                     <a-icon type="exclamation-circle" />
                   </a-tooltip>
                 </a-checkbox>
-
               </a-checkbox-group>
             </a-form-item>
             <!--            0角色 1用户 2部门 3发起人 4发起人的部门负责人-->
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="选择角色" v-if="spryTypes.indexOf('0')>-1" >
-              <j-select-role  v-model="spry.roleIds"/>
+            <a-form-item
+              :label-col="labelCol"
+              :wrapper-col="wrapperCol"
+              label="选择角色"
+              v-if="spryTypes.indexOf('0')>-1"
+            >
+              <j-select-role v-model="spry.roleIds" />
             </a-form-item>
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="选择人员" v-if="spryTypes.indexOf('1')>-1" >
+            <a-form-item
+              :label-col="labelCol"
+              :wrapper-col="wrapperCol"
+              label="选择人员"
+              v-if="spryTypes.indexOf('1')>-1"
+            >
               <!--  通过部门选择用户控件 -->
               <j-select-user-by-dep v-model="spry.userIds" :multi="true"></j-select-user-by-dep>
             </a-form-item>
-            <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="选择部门" v-if="spryTypes.indexOf('2')>-1" >
+            <a-form-item
+              :label-col="labelCol"
+              :wrapper-col="wrapperCol"
+              label="选择部门"
+              v-if="spryTypes.indexOf('2')>-1"
+            >
               <j-select-depart v-model="spry.departmentIds" :multi="true"></j-select-depart>
             </a-form-item>
             <!--btn-->
+            <!-- :disabled="editNode.type==0||editNode.type==2||confirmLoading" -->
             <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
-              <a-button @click="sprySubmit" type="primary" html-type="submit" :disabled="editNode.type==0||editNode.type==2||confirmLoading">
-                提交并保存
-              </a-button>
+              <a-button
+                @click="sprySubmit"
+                type="primary"
+                html-type="submit"
+                :disabled="editNode.type==2||confirmLoading"
+              >提交并保存</a-button>
 
-              <a-button @click="closeNode" style="margin-left: 10px">
-                关闭
-              </a-button>
+              <a-button @click="closeNode" style="margin-left: 10px">关闭</a-button>
             </a-form-item>
           </a-form>
         </a-col>
       </a-row>
     </a-modal>
+    
     <!--查看图片-->
     <a-modal
-      :title="viewTitle" width="90%"
-      :visible="viewImage" :footer="null"
+      :title="viewTitle"
+      width="90%"
+      :visible="viewImage"
+      :footer="null"
       @cancel="viewImage = false"
     >
       <div style="min-height: 400px">
-        <img :src="diagramUrl" :alt="viewTitle">
+        <img :src="diagramUrl" :alt="viewTitle" />
       </div>
     </a-modal>
+    <!-- 表单编辑器 -->
+    <a-drawer
+      title="编辑器"
+       width="100%"
+       style="top:0%;height: 100%;"
+       :visible="editorVisible"
+       @close="editFromClose"
+    >
+      <iframe :src="editorJumpUrl" width="100%" height="800" frameborder="0" scrolling="auto" id="iframename" name="iframename"></iframe>
+      <div
+        :style="{
+          position: 'absolute',
+          right: 0,
+          bottom: 0,
+          width: '100%',
+          borderTop: '1px solid #e9e9e9',
+          padding: '10px 16px',
+          background: '#fff',
+          textAlign: 'right',
+          zIndex: 1,
+        }"
+      >
+        <a-button :style="{ marginRight: '8px' }" @click="editFromClose">
+          关闭
+        </a-button>
+      </div>
+    </a-drawer>
     <!--流程表单 预览-->
     <!-- <a-modal  :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="80%">
       <component :is="lcModa.formComponent" :disabled="true"></component>
-    </a-modal> -->
-    <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="80%">
-      <component :disabled="lcModa.disabled" v-if="lcModa.visible" :is="lcModa.formComponent"
-                 :processData="lcModa.processData" :isNew = "lcModa.isNew"
-                 @close="lcModa.visible=false,lcModa.disabled = false"></component>
+    </a-modal>-->
+    <a-modal
+      :title="lcModa.title"
+      v-model="lcModa.visible"
+      :footer="null"
+      :maskClosable="false"
+      width="80%"
+    >
+      <component
+        :disabled="lcModa.disabled"
+        v-if="lcModa.visible"
+        :is="lcModa.formComponent"
+        :processData="lcModa.processData"
+        :isNew="lcModa.isNew"
+        @close="lcModa.visible=false,lcModa.disabled = false"
+      ></component>
     </a-modal>
   </a-card>
-
 </template>
 
 <script>
-  import { filterObj } from '@/utils/util';
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
-  import JEllipsis from '@/components/jeecg/JEllipsis'
-  import { deleteAction, getAction,downFile } from '@/api/manage'
-  import pick from "lodash.pick";
-  import JTreeSelect from '@/components/jeecg/JTreeSelect'
-  import {initDictOptions, filterDictText} from '@/components/dict/JDictSelectUtil'
-  import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
-  import JSelectRole from '@/components/jeecgbiz/JSelectRole'
-  import JSelectDepart from '@/components/jeecgbiz/JSelectDepart'
-  export default {
-    name: "ProcessModelList",
-    mixins:[activitiMixin,JeecgListMixin],
-    components: {
-      JEllipsis,JSelectUserByDep,JSelectRole,JSelectDepart
-      ,JTreeSelect
-    },
-    data () {
-      return {
-        viewImage:false,
-        viewTitle:"",
-        diagramUrl:"",
-        /*编辑流程*/
-        editObj:{
-          visible: false,
-        },
-        editForm: this.$form.createForm(this),
+import { filterObj } from '@/utils/util'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+import { deleteAction, getAction, downFile,postFormAction2 } from '@/api/manage'
+import pick from 'lodash.pick'
+import JTreeSelect from '@/components/jeecg/JTreeSelect'
+import { initDictOptions, filterDictText } from '@/components/dict/JDictSelectUtil'
+import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
+import JSelectRole from '@/components/jeecgbiz/JSelectRole'
+import JSelectDepart from '@/components/jeecgbiz/JSelectDepart'
+import {getEditorJumpUrl}from '../../../url.config'
+import { queryList,updateTbTableInfo } from '@/api/api'
+export default {
+  name: 'ProcessModelList',
+  mixins: [activitiMixin, JeecgListMixin],
+  components: {
+    JEllipsis,
+    JSelectUserByDep,
+    JSelectRole,
+    JSelectDepart,
+    JTreeSelect
+  },
+  data() {
+    return {
+      tableByBusinessTableList:[],//节点关联表单下拉集合
+      imageUrl:"",
+      viewImage: false,
+      editorVisible:false,
+      editorJumpUrl:"",
+      viewTitle: '',
+      diagramUrl: '',
+      /*编辑流程*/
+      editObj: {
+        visible: false
+      },
+      editForm: this.$form.createForm(this),
 
-        description: '已部署模型',
-        // 查询条件
-        queryParam: {
-          createTimeRange:[],
-          keyWord:'',
-        },
-        tabKey: "1",
-        // 表头
-        labelCol: {
-          xs: { span: 4 },
-          sm: { span: 4 },
-        },
-        wrapperCol: {
-          xs: { span: 20 },
-          sm: { span: 20 },
-        },
-        confirmLoading:false,
-        current:0,
-        nodeForm: this.$form.createForm(this),
-        dictOptions:[],
-        nodeList:[],
-        editNode:{},
-        showProcessNodeEdit:false,
-        dictNodeType:{
-          '0':'开始节点',
-          '1':'审批节点',
-          '2':'结束节点',
-        },
-        spryTypes:[],
-        url: {
-          list: "/activiti_process/listData",
-          img: "/activiti/models/export",
-          updateStatus: "/activiti_process/updateStatus",
-          delByIds: "/activiti_process/delByIds",
-          convertToModel: "/activiti_process/convertToModel",
-          updateInfo: "/activiti_process/updateInfo",
-          getProcessNode: "/activiti_process/getProcessNode",
-          editNodeUser: "/activiti_process/editNodeUser",
-        },
-        spry:{
-          //选中的用户
-          userIds:'',
-          roleIds:'',
-          departmentIds:'',
-          chooseSponsor:false,
-          chooseDepHeader:false,
-        },
-        lcModa: {
-          title:'',
-          disabled:false,
-          visible:false,
-          formComponent : null,
-          isNew : false
-        },
-        lcTypeF:[],
-        dataList: [],
-        allFormComponent2:[]
-      }
-    },
-    computed:{
-      //可行性测试,根据文件路径动态加载组件
-      LcDict:function(){
-        var myComponent =() => import(`@/components/dict/JDictSelectTag`);
-        return myComponent;
+      description: '已部署模型',
+      // 查询条件
+      queryParam: {
+        createTimeRange: [],
+        keyWord: ''
       },
-    },
-    created(){
-      // getAction("/actBusiness/getTableInfoList").then(res=>{
-      //     this.allFormComponent2=res.result;
-      //   })
-      //获取关联表下拉数据
-      this.getTableList();
-    },
-    methods: {
-      initDictConfig() {
-        //初始化字典 - 流程分类
-        initDictOptions('bpm_process_type').then((res) => {
-          if (res.success) {
-            var lcTypes = [];
-            this.dictOptions = res.result||[];
-            for (const dict of this.dictOptions) {
-              lcTypes.push({text:dict.text,value:dict.value})
-            }
-            this.lcTypeF = lcTypes;
-            console.log(lcTypes)
-          }
-        });
+      tabKey: '1',
+      // 表头
+      labelCol: {
+        xs: { span: 4 },
+        sm: { span: 4 }
       },
-      filterDictText(dictOptions, text) {
-        if (dictOptions instanceof Array) {
-          for (let dictItem of dictOptions) {
-            if (text === dictItem.value) {
-              return dictItem.text
-            }
-          }
-        }
-        return text
+      wrapperCol: {
+        xs: { span: 20 },
+        sm: { span: 20 }
       },
-      closeNode() {
-        this.showProcessNodeEdit = false,
-        this.current=0,
-        this.spryTypes=[],
-        this.spry={}
+      confirmLoading: false,
+      current: 0,
+      nodeForm: this.$form.createForm(this),
+      dictOptions: [],
+      nodeList: [],
+      editNode: {},
+      showProcessNodeEdit: false,
+      dictNodeType: {
+        '0': '开始节点',
+        '1': '审批节点',
+        '2': '结束节点'
       },
-      /*编辑流程节点*/
-
-      change_steps(node,index){
-        this.spryTypes = [];
-        console.log('onChange:', node);
-        this.current = index;
-        this.editNode = node;
-        /* 0角色 1用户 2部门 3发起人 4发起人的部门负责人*/
-        this.spry.chooseDepHeader = node.chooseDepHeader||false;
-        if (this.spry.chooseDepHeader) this.spryTypes.push('4') ;
-        this.spry.chooseSponsor = node.chooseSponsor||false;
-        if (this.spry.chooseSponsor) this.spryTypes.push('3') ;
-        var userIds = [];
-        for (const user of node.users||[]) {
-          userIds.push(user.username);
-        }
-        this.spry.userIds = userIds.join(",");
-        if (userIds.length>0) this.spryTypes.push('1') ;
-        var roleIds = []
-        for (const role of node.roles||[]) {
-          roleIds.push(role.roleCode)
+      spryTypes: [],
+      url: {
+        list: '/activiti_process/listData',
+        img: '/activiti/models/export',
+        updateStatus: '/activiti_process/updateStatus',
+        delByIds: '/activiti_process/delByIds',
+        convertToModel: '/activiti_process/convertToModel',
+        updateInfo: '/activiti_process/updateInfo',
+        updateInfo2: '/activiti_process/updateInfo2',
+        getProcessNode: '/activiti_process/getProcessNode',
+        editNodeUser: '/activiti_process/editNodeUser'
+      },
+      spry: {
+        //选中的用户
+        userIds: '',
+        roleIds: '',
+        departmentIds: '',
+        chooseSponsor: false,
+        chooseDepHeader: false,
+        tbTableInfoId:null
+      },
+      lcModa: {
+        title: '',
+        disabled: false,
+        visible: false,
+        formComponent: null,
+        isNew: false
+      },
+      lcTypeF: [],
+      dataList: [],
+      allFormComponent2: []
+    }
+  },
+  computed: {
+    //可行性测试,根据文件路径动态加载组件
+    LcDict: function() {
+      var myComponent = () => import(`@/components/dict/JDictSelectTag`)
+      return myComponent
+    }
+  },
+  created() {
+    // getAction("/actBusiness/getTableInfoList").then(res=>{
+    //     this.allFormComponent2=res.result;
+    //   })
+    //获取关联表下拉数据
+    this.getTableList()
+  },
+  methods: {
+    initDictConfig() {
+      //初始化字典 - 流程分类
+      initDictOptions('bpm_process_type').then(res => {
+        if (res.success) {
+          var lcTypes = []
+          this.dictOptions = res.result || []
+          for (const dict of this.dictOptions) {
+            lcTypes.push({ text: dict.text, value: dict.value })
+          }
+          this.lcTypeF = lcTypes
+          console.log(lcTypes)
         }
-        this.spry.roleIds = roleIds.join(",")
-        if (roleIds.length>0) this.spryTypes.push('0') ;
-        var departmentIds = []
-        for (const department of node.departments||[]) {
-          departmentIds.push(department.id)
+      })
+    },
+    filterDictText(dictOptions, text) {
+      if (dictOptions instanceof Array) {
+        for (let dictItem of dictOptions) {
+          if (text === dictItem.value) {
+            return dictItem.text
+          }
         }
-        this.spry.departmentIds = departmentIds.join(",")
-        if (departmentIds.length>0) this.spryTypes.push('2') ;
-        console.log("回显this.spry",this.spry)
+      }
+      return text
+    },
+    closeNode() {
+      ;(this.showProcessNodeEdit = false), (this.current = 0), (this.spryTypes = []), (this.spry = {})
+    },
+    /*编辑流程节点*/
 
-      },
-      spryType(types){
-        /* 0角色 1用户 2部门 3发起人 4发起人的部门负责人*/
-        // this.spryTypes = types;
-        if (this.spryTypes.indexOf('0')==-1) this.spry.roleIds = '';
-        if (this.spryTypes.indexOf('1')==-1) this.spry.userIds = '';
-        if (this.spryTypes.indexOf('2')==-1) this.spry.departmentIds = '';
-        //是否选中发起人
-        this.spry.chooseSponsor = this.spryTypes.indexOf('3')>-1 ;
-        //是否选中发起人的部门领导
-        this.spry.chooseDepHeader = this.spryTypes.indexOf('4')>-1 ;
+    change_steps(node, index) {
+      this.spryTypes = []
+      console.log('onChange:', node)
+      this.current = index
+      this.editNode = node
+      /* 0角色 1用户 2部门 3发起人 4发起人的部门负责人*/
+      this.spry.chooseDepHeader = node.chooseDepHeader || false
+      if (this.spry.chooseDepHeader) this.spryTypes.push('4')
+      this.spry.chooseSponsor = node.chooseSponsor || false
+      if (this.spry.chooseSponsor) this.spryTypes.push('3')
+      var userIds = []
+      for (const user of node.users || []) {
+        userIds.push(user.username)
+      }
+      this.spry.userIds = userIds.join(',')
+      if (userIds.length > 0) this.spryTypes.push('1')
+      var roleIds = []
+      for (const role of node.roles || []) {
+        roleIds.push(role.roleCode)
+      }
+      this.spry.roleIds = roleIds.join(',')
+      if (roleIds.length > 0) this.spryTypes.push('0')
+      var departmentIds = []
+      for (const department of node.departments || []) {
+        departmentIds.push(department.id)
+      }
+      this.spry.departmentIds = departmentIds.join(',')
+      if (departmentIds.length > 0) this.spryTypes.push('2')
+      //关联表单
+      var tbTableInfoId=null;
+      if(node.tbTableInfoId){
+        tbTableInfoId=node.tbTableInfoId
+      }
+      this.spry.tbTableInfoId=tbTableInfoId;
+     
+      console.log('回显this.spry', this.spry)
+    },
+    spryType(types) {
+      /* 0角色 1用户 2部门 3发起人 4发起人的部门负责人*/
+      // this.spryTypes = types;
+      if (this.spryTypes.indexOf('0') == -1) this.spry.roleIds = ''
+      if (this.spryTypes.indexOf('1') == -1) this.spry.userIds = ''
+      if (this.spryTypes.indexOf('2') == -1) this.spry.departmentIds = ''
+      //是否选中发起人
+      this.spry.chooseSponsor = this.spryTypes.indexOf('3') > -1
+      //是否选中发起人的部门领导
+      this.spry.chooseDepHeader = this.spryTypes.indexOf('4') > -1
 
-        console.log("this.spry",this.spry)
-      },
-      sprySubmit() {
-        var _this = this;
-        if (this.spryTypes.length==0){
-          _this.$message.error("必须选择审批人!");
-          return;
-        }
-        _this.confirmLoading = true;
-        this.spry.nodeId = this.editNode.id;
-        this.postFormAction(_this.url.editNodeUser,this.spry).then(res => {
+      console.log('this.spry', this.spry)
+    },
+    sprySubmit() {
+      var _this = this
+      //开始节点 选择初始提交表单
+      if(this.editNode.type==0){
+        let where={id:this.spry.tbTableInfoId,isInitial:"1"}
+        updateTbTableInfo(where).then((res)=>{
+          if(res.success){
+            _this.$message.success('操作成功')
+          }else{
+            _this.$message.error('操作失败')
+          }
+        });
+        return;
+      }
+      
+      if (this.spryTypes.length == 0) {
+        _this.$message.error('必须选择审批人!')
+        return
+      }
+      _this.confirmLoading = true
+      this.spry.nodeId = this.editNode.id
+      this.postFormAction(_this.url.editNodeUser, this.spry)
+        .then(res => {
           if (res.success) {
-            _this.$message.success("操作成功");
+            _this.$message.success('操作成功')
             // _this.getData();
-          }else {
-            _this.$message.error(res.message);
+          } else {
+            _this.$message.error(res.message)
           }
-        }).finally(() => _this.confirmLoading = false);
-      },
-      getNodeData(row){
-        var _this = this;
-        _this.postFormAction(_this.url.getProcessNode,{
-          id:row.id
-        }).then(res => {
+        })
+        .finally(() => (_this.confirmLoading = false))
+    },
+    getNodeData(row) {
+      //查询节点关联表单下拉数据
+      const where={businessTable:row.businessTable}
+      queryList(where).then((res)=>{
+        this.tableByBusinessTableList=res.result;
+      })
+      var _this = this
+      _this
+        .postFormAction(_this.url.getProcessNode, {
+          id: row.id
+        })
+        .then(res => {
           if (res.success) {
             // 转换null为""
-            _this.nodeList = res.result||[];
-            console.log("_this.nodeList",_this.nodeList);
-            if (_this.nodeList.length>0){
-              _this.editNode = _this.nodeList[0];
-              _this.showProcessNodeEdit = true;
+            _this.nodeList = res.result || []
+            console.log('_this.nodeList', _this.nodeList)
+            if (_this.nodeList.length > 0) {
+              _this.editNode = _this.nodeList[0]
+              _this.showProcessNodeEdit = true
             }
-          }else {
-            _this.$message.error(res.message);
-          }
-        });
-      },
-      /*编辑流程信息*/
-      edit(row){
-        //获取关联表下拉数据
-        this.getTableList();
-        this.editObj = Object.assign(this.editObj, row)
-        this.editObj.visible = true;
-      },
-      editObjOk(){
-        var _this = this;
-        this.editForm.validateFields((err, values) => {
-          if (!err) {
-            let formData = Object.assign(this.editObj, values)
-            console.log("formData",formData)
-            this.confirmLoading = true;
-            this.postFormAction(this.url.updateInfo,formData).then(res => {
-              if (res.success) {
-                _this.$message.success("操作成功");
-                _this.loadData();
-                _this.editObj.visible = false;
-              }else {
-                _this.$message.error(res.message);
-              }
-            }).finally(() => _this.confirmLoading = false);;
+          } else {
+            _this.$message.error(res.message)
           }
         })
-      },
-      change_routeName(event){
-        this.$nextTick(()=>{
-          let routeName = this.editForm.getFieldValue('routeName');
-          console.log("routeName",routeName)
-          var route = this.getFormComponent(routeName);
-          this.editObj.businessTable = route.businessTable;
-          this.editObj.routeName = route.routeName;
-          console.log("this.editObj",this.editObj)
-        })
-      },
-      viewForm(r) {
-        // if (!routeName) routeName = this.editObj.routeName;
-        // if (!routeName) {
-        //   this.$message.warning(
-        //     "请先选择表单!"
-        //   );
-        //   return;
-        // }
-        // let formComponent = this.getFormComponent(routeName);
-        // this.lcModa.formComponent = formComponent.component;
-        // this.lcModa.title = '流程表单预览:'+formComponent.text;
-        // this.lcModa.visible = true;
-        if(r.routeName.indexOf("外部表单")!=-1){
-          alert("调用其他项目页面")
-        }else if(r.routeName.indexOf("自定义")!=-1){//自定义表单展开
-          this.lcModa.disabled = true;
-          let com={component:() => import(`@/views/activiti/form/demoForm2`)}
-          this.lcModa.formComponent = com.component;
-          this.lcModa.title = '流程表单预览';
-          this.lcModa.isNew = true;
-          this.lcModa.processData = {businessTable:r.businessTable};
-          this.lcModa.visible = true;
-        }else{//自带表单展开
-          this.lcModa.disabled = true;
-          this.lcModa.formComponent = this.getFormComponent(r.routeName).component;
-          this.lcModa.title = '流程表单预览';
-          this.lcModa.isNew = true;
-          this.lcModa.processData = r;
-          this.lcModa.visible = true;
-        }
-        
-      },
-      convertToModel(row){
-        let that = this;
-        this.$confirm({
-          title: "确认转化",
-          content: "您确认要转化流程 " + row.name + " 为模型?",
-          loading: true,
-          onOk: () => {
-            that.postFormAction(`${that.url.convertToModel}`,{id:row.id}).then(res => {
-              if (res.success) {
-                setTimeout(function() {
-                  that.$message.success("转化成功");
-                }, 300);
-              }else {
-                that.$message.error(res.message);
-              }
-            });
-          }
-        });
-      },
-      remove(row) {
-        var _this = this;
-        _this.$confirm({
-          title: "确认删除",
-          content: "您确认要删除流程 " + row.name + " ?",
-          loading: true,
-          onOk: () => {
-            _this.postFormAction(_this.url.delByIds,{ids:row.id}).then(res => {
+    },
+    /*编辑流程信息*/
+    edit(row) {
+      //获取关联表下拉数据
+      this.getTableList()
+      this.editObj = Object.assign(this.editObj, row)
+      this.imageUrl=this.editObj.iconAddress
+      this.editObj.visible = true
+    },
+    editObjOk() {
+      var _this = this
+      this.editForm.validateFields((err, values) => {
+        if (!err) {
+          let formData = Object.assign(this.editObj, values)
+          console.log('formData', formData)
+          formData.iconAddress=this.imageUrl;
+          this.confirmLoading = true
+          postFormAction2(this.url.updateInfo2, formData)
+            .then(res => {
               if (res.success) {
-                _this.$message.success("操作成功");
-                _this.loadData();
-              }else {
-                _this.$message.error(res.message);
+                _this.$message.success('操作成功')
+                _this.loadData()
+                _this.editObj.visible = false
+              } else {
+                _this.$message.error(res.message)
               }
-            });
-          }
-        });
-      },
-      editStatus(status, row) {
-        var _this = this;
-        let operation = "";
-        if (status == 0) {
-          operation = "不启用";
-        } else {
-          operation = "启用";
+            })
+            .finally(() => (_this.confirmLoading = false))
         }
-        this.$confirm({
-          title: "确认" + operation+"?",
-          content:  `您确认要${operation}流程${row.name}?`,
-          onOk() {
-            let params = {
-              status: status,
-              id: row.id
-            };
-            _this.postFormAction(_this.url.updateStatus,params).then(res => {
-              if (res.success) {
-                _this.$message.success("操作成功");
-                _this.loadData();
-              }else {
-                _this.$message.error(res.message);
-              }
-            });
-          }
-          ,
-          onCancel() {},
-        });
-      },
-      /*查看流程图片*/
-      showResource(row) {
-          this.viewTitle = "流程图片预览(" + row.diagramName + ")";
-          this.diagramUrl = `${this.doMian}${this.url.img}?id=${row.id}`;
-          this.viewImage = true;
-      },
-      /*删除模型*/
-      deletelc(y,row) {
-        console.log(y,row);
-        if (y){
-          getAction(this.url.delete+row.id).then((res) => {
-            if (res.success){
-              this.$message.success(res.message);
-            }else {
-              this.$message.error(res.message);
+      })
+    },
+    change_routeName(event) {
+      this.$nextTick(() => {
+        let routeName = this.editForm.getFieldValue('routeName')
+        console.log('routeName', routeName)
+        var route = this.getFormComponent(routeName)
+        this.editObj.businessTable = route.businessTable
+        this.editObj.routeName = route.routeName
+        console.log('this.editObj', this.editObj)
+      })
+    },
+    viewForm(r) {
+      // if (!routeName) routeName = this.editObj.routeName;
+      // if (!routeName) {
+      //   this.$message.warning(
+      //     "请先选择表单!"
+      //   );
+      //   return;
+      // }
+      // let formComponent = this.getFormComponent(routeName);
+      // this.lcModa.formComponent = formComponent.component;
+      // this.lcModa.title = '流程表单预览:'+formComponent.text;
+      // this.lcModa.visible = true;
+      if (r.routeName.indexOf('外部表单') != -1) {
+        alert('调用其他项目页面')
+      } else if (r.routeName.indexOf('自定义') != -1) {
+        //自定义表单展开
+        this.lcModa.disabled = true
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModa.formComponent = com.component
+        this.lcModa.title = '流程表单预览'
+        this.lcModa.isNew = true
+        this.lcModa.processData = { businessTable: r.businessTable }
+        this.lcModa.visible = true
+      } else {
+        //自带表单展开
+        this.lcModa.disabled = true
+        this.lcModa.formComponent = this.getFormComponent(r.routeName).component
+        this.lcModa.title = '流程表单预览'
+        this.lcModa.isNew = true
+        this.lcModa.processData = r
+        this.lcModa.visible = true
+      }
+    },
+    convertToModel(row) {
+      let that = this
+      this.$confirm({
+        title: '确认转化',
+        content: '您确认要转化流程 ' + row.name + ' 为模型?',
+        loading: true,
+        onOk: () => {
+          that.postFormAction(`${that.url.convertToModel}`, { id: row.id }).then(res => {
+            if (res.success) {
+              setTimeout(function() {
+                that.$message.success('转化成功')
+              }, 300)
+            } else {
+              that.$message.error(res.message)
             }
-            this.loadData();
-          });
+          })
         }
-      },
-      handleTableChange(pagination, filters, sorter) {
-        //分页、排序、筛选变化时触发
-        //TODO 筛选
-        if (Object.keys(sorter).length > 0) {
-          this.isorter.column = sorter.field;
-          this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
+      })
+    },
+    remove(row) {
+      var _this = this
+      _this.$confirm({
+        title: '确认删除',
+        content: '您确认要删除流程 ' + row.name + ' ?',
+        loading: true,
+        onOk: () => {
+          _this.postFormAction(_this.url.delByIds, { ids: row.id }).then(res => {
+            if (res.success) {
+              _this.$message.success('操作成功')
+              _this.loadData()
+            } else {
+              _this.$message.error(res.message)
+            }
+          })
         }
-        this.ipagination = pagination;
-        console.log(pagination,filters,sorter)
-        /*if (Object.keys(filters).length>0&&this.dataList.length>0){
+      })
+    },
+    editStatus(status, row) {
+      var _this = this
+      let operation = ''
+      if (status == 0) {
+        operation = '不启用'
+      } else {
+        operation = '启用'
+      }
+      this.$confirm({
+        title: '确认' + operation + '?',
+        content: `您确认要${operation}流程${row.name}?`,
+        onOk() {
+          let params = {
+            status: status,
+            id: row.id
+          }
+          _this.postFormAction(_this.url.updateStatus, params).then(res => {
+            if (res.success) {
+              _this.$message.success('操作成功')
+              _this.loadData()
+            } else {
+              _this.$message.error(res.message)
+            }
+          })
+        },
+        onCancel() {}
+      })
+    },
+    /*查看流程图片*/
+    showResource(row) {
+      this.viewTitle = '流程图片预览(' + row.diagramName + ')'
+      this.diagramUrl = `${this.doMian}${this.url.img}?id=${row.id}`
+      this.viewImage = true
+    },
+    /*删除模型*/
+    deletelc(y, row) {
+      console.log(y, row)
+      if (y) {
+        getAction(this.url.delete + row.id).then(res => {
+          if (res.success) {
+            this.$message.success(res.message)
+          } else {
+            this.$message.error(res.message)
+          }
+          this.loadData()
+        })
+      }
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      //TODO 筛选
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      console.log(pagination, filters, sorter)
+      /*if (Object.keys(filters).length>0&&this.dataList.length>0){
           for (const filterField in filters) {
             let fiterVals = filters[filterField]||[];
 
           }
         }*/
-        // this.loadData();
-      },
-      loadData(arg) {
-        if(!this.url.list){
-          this.$message.error("请设置url.list属性!")
-          return
+      // this.loadData();
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error('请设置url.list属性!')
+        return
+      }
+      //加载数据 若传入参数1则加载第一页的内容
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      var params = this.getQueryParams() //查询条件
+      this.loading = true
+      getAction(this.url.list, params).then(res => {
+        if (res.success) {
+          let records = res.result || []
+          this.dataSource = records
+          this.dataList = records
+          this.ipagination.total = records.length
         }
-        //加载数据 若传入参数1则加载第一页的内容
-        if (arg === 1) {
-          this.ipagination.current = 1;
+        if (res.code === 510) {
+          this.$message.warning(res.message)
         }
-        var params = this.getQueryParams();//查询条件
-        this.loading = true;
-        getAction(this.url.list, params).then((res) => {
-          if (res.success) {
-            let records = res.result||[];
-            this.dataSource = records;
-            this.dataList = records;
-            this.ipagination.total = records.length;
-          }
-          if(res.code===510){
-            this.$message.warning(res.message)
-          }
-          this.loading = false;
-        })
-      },
-      getQueryParams(){
-        var param = Object.assign({}, this.queryParam,this.isorter);
-        delete param.createTimeRange; // 时间参数不传递后台
-        return filterObj(param);
-      },
+        this.loading = false
+      })
+    },
+    getQueryParams() {
+      var param = Object.assign({}, this.queryParam, this.isorter)
+      delete param.createTimeRange // 时间参数不传递后台
+      return filterObj(param)
+    },
 
-      // 重置
-      searchReset(){
-        var that = this;
-        var logType = that.queryParam.logType;
-        that.queryParam = {}; //清空查询区域参数
-        that.queryParam.logType = logType;
-        that.loadData(this.ipagination.current);
-      },
-      onDateChange: function (value, dateString) {
-        console.log(dateString[0],dateString[1]);
-        this.queryParam.createTime_begin=dateString[0];
-        this.queryParam.createTime_end=dateString[1];
-      },
-      onDateOk(value) {
-        console.log(value);
-      },
+    // 重置
+    searchReset() {
+      var that = this
+      var logType = that.queryParam.logType
+      that.queryParam = {} //清空查询区域参数
+      that.queryParam.logType = logType
+      that.loadData(this.ipagination.current)
+    },
+    onDateChange: function(value, dateString) {
+      console.log(dateString[0], dateString[1])
+      this.queryParam.createTime_begin = dateString[0]
+      this.queryParam.createTime_end = dateString[1]
+    },
+    onDateOk(value) {
+      console.log(value)
+    },
 
-      filter_categoryId(v,r) {
-        // console.log(v,r)
-        return r.categoryId == v;
-      },
-      editFormsOnline(){
-        //在线编辑表单
-        // window.location.href = 'http://localhost:8080/#/formDesign'
-        window.open('http://localhost:8080/#/formDesign', '_blank')
-      },
-      //编辑表单
-      editFrom(r){
-        window.open('http://localhost:8080/#/formDesign?tableName='+r.businessTable, '_blank')
+    filter_categoryId(v, r) {
+      // console.log(v,r)
+      return r.categoryId == v
+    },
+    editFormsOnline() {
+      //在线编辑表单
+      // window.location.href = 'http://localhost:8080/#/formDesign'
+      // window.open('http://localhost:8080/#/formDesign', '_blank')
+      // window.open('http://106.15.206.14:8089/#/formDesign', '_blank')//测试地址
+      // window.open(getEditorJumpUrl()+'/#/formDesign', '_blank')
+      this.editorVisible=true;
+      this.editorJumpUrl=getEditorJumpUrl()+'/#/formDesign';
+    },
+    //编辑表单
+    editFrom(r) {
+      // window.open('http://localhost:8080/#/formDesign?tableName=' + r.businessTable, '_blank')
+      // window.open('http://106.15.206.14:8089/#/formDesign?tableName='+r.businessTable, '_blank')//测试地址
+      this.editorVisible=true;
+      // window.open(getEditorJumpUrl()+'/#/formDesign?tableName='+r.businessTable, '_blank')//测试地址
+      this.editorJumpUrl=getEditorJumpUrl()+'/#/formDesign?tableName='+r.businessTable;
+    },
+    //编辑表单弹框关闭按钮
+    editFromClose(){
+      this.editorVisible=false;
+      this.editorJumpUrl="";
+    },
+    imgHandleChange(info){
+      if (info.file.status === 'done') {
+        // Get this url from response in real world.
+        getBase64(info.file.originFileObj, imageUrl => {
+          this.imageUrl = imageUrl;
+          this.editObj.iconAddress=imageUrl
+           console.log(this.editObj.iconAddress)
+          this.loading = false;
+        });
       }
-      
+     
     }
   }
+}
+function getBase64(img, callback) {
+  const reader = new FileReader();
+  reader.addEventListener('load', () => callback(reader.result));
+  reader.readAsDataURL(img);
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
-  .nodespan{
-    color: #999;
-  }
-  .ant-checkbox-wrapper + .ant-checkbox-wrapper{
-    margin-left: 0;
-    margin-right: 8px;
-  }
+@import '~@assets/less/common.less';
+.nodespan {
+  color: #999;
+}
+.ant-checkbox-wrapper + .ant-checkbox-wrapper {
+  margin-left: 0;
+  margin-right: 8px;
+}
 </style>

+ 4 - 2
src/views/activiti/applyList.vue

@@ -157,10 +157,11 @@
       @close="processModalVisible = false"
       :visible="processModalVisible"
     >
+    <a-input-search style="margin-bottom: 10px;width: 200px"
+                        placeholder="输入流程名称" @search="onSearchProcess" />
       <a-empty description="无流程可供选择" v-if="activeKeyAll.length==0" />
       <div v-else>
-        <a-input-search style="margin-bottom: 10px;width: 200px"
-                        placeholder="输入流程名称" @search="onSearchProcess" />
+        
         <a-collapse v-model="activeKey">
           <a-collapse-panel v-for="(value, index)  in activeKeyAll" :header="filterDictText(dictOptions,value)||'未分类'" :key="value">
             <a-list :grid="{ gutter: 10,column:1}" :dataSource="processDataMap[value]">
@@ -604,6 +605,7 @@
         this.getProcessList()
       },
       chooseProcess(v) {
+        console.log(v)
         // this.$refs.modal.add("1")
         if (!v.routeName) {
           this.$message.warning(

+ 21 - 20
src/views/dashboard/Analysis.vue

@@ -1,5 +1,7 @@
 <template>
   <div>
+    
+    <index-oa ></index-oa>
     <index-chart v-if="indexStyle==1"></index-chart>
     <index-bdc v-if="indexStyle==2"></index-bdc>
     <index-task v-if="indexStyle==3"></index-task>
@@ -15,27 +17,26 @@
 </template>
 
 <script>
-  import IndexChart from './IndexChart'
-  import IndexTask from "./IndexTask"
-  import IndexBdc from './IndexBdc'
+import IndexChart from './IndexChart'
+import IndexTask from './IndexTask'
+import IndexBdc from './IndexBdc'
+import IndexOa from './IndexOa'
 
-  export default {
-    name: "Analysis",
-    components: {
-      IndexChart,
-      IndexTask,
-      IndexBdc
-    },
-    data() {
-      return {
-        indexStyle:1
-      }
-    },
-    created() {
-
-    },
-    methods: {
 
+export default {
+  name: 'Analysis',
+  components: {
+    IndexChart,
+    IndexTask,
+    IndexBdc,
+    IndexOa
+  },
+  data() {
+    return {
+      indexStyle: 1
     }
-  }
+  },
+  created() {},
+  methods: {}
+}
 </script>

+ 148 - 0
src/views/dashboard/IndexOa.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="page-header-index-wide">
+    <a-row :gutter="24">
+      <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '24px' }">
+        <a-card size="small" title="OA工作台" :bordered="false" >
+          <a-row :gutter="24">
+            <a-col :sm="24" :md="12" :xl="2" v-for="(item,index)  in activeKeyAll" :key="index">
+              <a-card size="small" :bordered="false" >
+                <a-row :gutter="24">
+                  <a-col :sm="24" :md="24" :xl="24" style="margin-bottom:24px;text-align:center">
+                    <!-- <a-avatar :size="64"
+                      src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
+                    />-->
+                    <a @click.prevent="aClick(item)" >
+                      <a-avatar
+                        shape="square"
+                        :size="64"
+                        :src="item.iconAddress"
+                      />
+                    </a>
+                  </a-col>
+                  <a-col :sm="24" :md="24" :xl="24" style="margin-bottom:24px;text-align:center">
+                    <h4>{{item.name}}</h4>
+                  </a-col>
+                </a-row>
+                <!-- <a-upload
+                  action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
+                  list-type="picture-card"
+                  :file-list="fileList"
+                  :disabled="true"
+                >
+                </a-upload>-->
+              </a-card>
+            </a-col>
+          </a-row>
+        </a-card>
+      </a-col>
+    </a-row>
+    
+    <!--流程表单-->
+    <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="80%">
+      <component :disabled="lcModa.disabled" v-if="lcModa.visible" :is="lcModa.formComponent"
+                 :processData="lcModa.processData" :isNew = "lcModa.isNew"
+                 @afterSubmit="afterSub" @close="lcModa.visible=false,lcModa.disabled = false"></component>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import ChartCard from '@/components/ChartCard'
+import ACol from 'ant-design-vue/es/grid/Col'
+import ATooltip from 'ant-design-vue/es/tooltip/Tooltip'
+import MiniArea from '@/components/chart/MiniArea'
+import MiniBar from '@/components/chart/MiniBar'
+import MiniProgress from '@/components/chart/MiniProgress'
+import RankList from '@/components/chart/RankList'
+import Bar from '@/components/chart/Bar'
+import LineChartMultid from '@/components/chart/LineChartMultid'
+import HeadInfo from '@/components/tools/HeadInfo.vue'
+
+import Trend from '@/components/Trend'
+import { getLoginfo, getVisitInfo } from '@/api/api'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+
+export default {
+  mixins:[activitiMixin],
+  name: 'IndexOa',
+  data() {
+    return {
+      loading: true,
+      visitFields: ['ip', 'visit'],
+      indicator: <a-icon type="loading" style="font-size: 24px" spin />,
+      activeKeyAll:[],
+      lcModa: {
+        title:'',
+        disabled:false,
+        visible:false,
+        formComponent : null,
+        isNew : false
+      },
+    }
+  },
+  created() {
+    setTimeout(() => {
+      this.loading = !this.loading
+    }, 1000)
+    this.getActiveKeyAll();
+  },
+  methods: {
+    //获取OA工作流List
+    getActiveKeyAll() {
+      this.postFormAction("/activiti_process/listData", { status: 1, roles: true })
+        .then(res => {
+          this.activeKeyAll = []
+          if (res.success) {
+            var result = res.result || []
+            if (result.length > 0) {
+              // this.processDataMap = _.groupBy(result, 'categoryId')
+              // for (const categoryId in this.processDataMap) {
+              //   this.activeKeyAll.push(categoryId)
+              // }
+              // this.activeKey = this.activeKeyAll
+              this.activeKeyAll=result;
+            } 
+            this.processModalVisible = true
+          } else {
+            this.$message.warning(res.message)
+          }
+        })
+        .finally(() => (this.addApplyLoading = false))
+    },
+    //OA图标点击事件
+    aClick(v) {
+      console.log(v)
+        // this.$refs.modal.add("1")
+        if (!v.routeName) {
+          this.$message.warning(
+            "该流程信息未配置表单,请联系开发人员!"
+          );
+          return;
+        }
+        if(v.routeName.indexOf("外部表单")!=-1){
+          alert("调用其他项目页面")
+        }else if(v.routeName.indexOf("自定义")!=-1){
+          this.lcModa.disabled = false;
+          let com={component:() => import(`@/views/activiti/form/demoForm2`)}
+          this.lcModa.formComponent = com.component;
+          this.lcModa.title = '发起流程:'+v.name;
+          this.lcModa.isNew = true;
+          this.lcModa.processData = v;
+          this.lcModa.visible = true;
+        }else{
+          this.lcModa.disabled = false;
+          this.lcModa.formComponent = this.getFormComponent(v.routeName).component;
+          this.lcModa.title = '发起流程:'+v.name;
+          this.lcModa.isNew = true;
+          this.lcModa.processData = v;
+          this.lcModa.visible = true;
+        }
+        console.log("发起",v)
+    },
+    afterSub(formData){
+          this.lcModa.visible = false;
+          // this.loadData();
+      },
+  }
+}
+</script>

+ 5 - 0
url.config.js

@@ -0,0 +1,5 @@
+export function getEditorJumpUrl () {
+    let url = 'http://localhost:8080'
+    // let url ="http://106.15.206.14:8089";//测试服务器
+    return url
+  }

+ 25 - 24
vue.config.js

@@ -1,6 +1,6 @@
-const path = require('path')
+const path = require ('path')
 
-function resolve (dir) {
+function resolve(dir) {
   return path.join(__dirname, dir)
 }
 
@@ -53,28 +53,7 @@ module.exports = {
       }
     }
   },
-  // devServer: {
-  //   port: 3000,
-  //   proxy: {
-  //     /* '/api': {
-  //       target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
-  //       ws: false,
-  //       changeOrigin: true,
-  //       pathRewrite: {
-  //         '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
-  //       }
-  //     }, */
-  //     '/jeecg-boot': {
-  //       target: 'http://127.0.0.1:8090', // 请求本地 需要jeecg-boot后台项目
-  //       // target: 'http://106.15.206.14:8087', // 测试环境
-  //       // ws: false,
-  //       changeOrigin: true
-  //     }
-  //   }
-  // },
   devServer: {
-    assetsSubDirectory:'static',
-    assetsPublicPath:'./',
     port: 3000,
     proxy: {
       /* '/api': {
@@ -93,8 +72,29 @@ module.exports = {
       }
     }
   },
+  // devServer: {
+  //   assetsSubDirectory:'static',
+  //   assetsPublicPath:'./',
+  //   port: 3000,
+  //   proxy: {
+  //     /* '/api': {
+  //       target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
+  //       ws: false,
+  //       changeOrigin: true,
+  //       pathRewrite: {
+  //         '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
+  //       }
+  //     }, */
+  //     '/jeecg-boot': {
+  //       target: 'http://127.0.0.1:8090', // 请求本地 需要jeecg-boot后台项目
+  //       // target: 'http://106.15.206.14:8087', // 测试环境
+  //       // ws: false,
+  //       changeOrigin: true
+  //     }
+  //   }
+  // },
 
-  lintOnSave: undefined,
+  lintOnSave: undefined
   // build:{
   //   index:path.resolve(__dirname,'../dist/index.html'),
   //   assetsRoot:path.resolve(__dirname,'../dist'),
@@ -102,3 +102,4 @@ module.exports = {
   //   assetsPublicPath:'./'
   // }
 }
+