armg преди 1 година
родител
ревизия
0b15f5fae6

+ 23 - 0
ruoyi-ui/src/components/nodeTableList/index.vue

@@ -0,0 +1,23 @@
+<template>
+  <div>
+    <el-table :data="list">
+      <el-table-column label="节点名称" align="center" prop="nodeName" />
+      <el-table-column label="审批人" align="center" prop="nodeUser" />
+      <el-table-column label="审批结果" align="center" prop="nodeResult" />
+      <el-table-column label="审批时间" align="center" prop="nodeTime" />
+    </el-table>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    list: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {};
+  },
+};
+</script>

+ 6 - 0
ruoyi-ui/src/main.js

@@ -13,6 +13,8 @@ import router from './router'
 import directive from './directive' // directive
 import plugins from './plugins' // plugins
 import { download } from '@/utils/request'
+// 防止重复点击事件
+import install from '@/utils/preventReClick'
 
 import './assets/icons' // icon
 import './permission' // permission control
@@ -42,6 +44,8 @@ import Tinymce from '@/components/tinymce/index.vue'
 
 // 查询条件展开收起组件
 import SearchFilter from '@/components/SearchFilter/index.vue'
+// 节点表格组件
+import nodeTableList from '@/components/nodeTableList/index.vue'
 
 
 
@@ -66,10 +70,12 @@ Vue.component('ImageUpload', ImageUpload)
 Vue.component('ImagePreview', ImagePreview)
 Vue.component('tinymce', Tinymce)
 Vue.component('SearchFilter', SearchFilter)
+Vue.component('nodeTableList', nodeTableList)
 
 Vue.use(directive)
 Vue.use(plugins)
 Vue.use(VueMeta)
+Vue.use(install)
 DictData.install()
 
 /**

+ 17 - 0
ruoyi-ui/src/utils/preventReClick.js

@@ -0,0 +1,17 @@
+export default {
+    install(Vue) {
+        // 防重复点击(指令实现)
+        Vue.directive('preventReClick', {
+            inserted(el, binding) {
+                el.addEventListener('click', () => {
+                    if (!el.disabled) {
+                        el.disabled = true
+                        setTimeout(() => {
+                            el.disabled = false
+                        }, binding.value || 2000)
+                    }
+                })
+            }
+        })
+    }
+}

+ 12 - 0
ruoyi-ui/src/views/crmSystem/approveQuery/index.vue

@@ -54,6 +54,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleManage(scope.row)"
                 >处理</el-button
               >
@@ -61,6 +62,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleRevocation(scope.row)"
                 >撤回</el-button
               >
@@ -68,6 +70,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleDetail(scope.row)"
                 >详情</el-button
               >
@@ -76,6 +79,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
+                v-preventReClick
                 @click="handleDelete(scope.row)"
                 >删除</el-button
               >
@@ -138,6 +142,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleManage(scope.row)"
                 >处理</el-button
               >
@@ -145,6 +150,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleRevocation(scope.row)"
                 >撤回</el-button
               >
@@ -152,6 +158,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleDetail(scope.row)"
                 >详情</el-button
               >
@@ -160,6 +167,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
+                v-preventReClick
                 @click="handleDelete(scope.row)"
                 >删除</el-button
               >
@@ -205,6 +213,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleManage(scope.row)"
                 >处理</el-button
               >
@@ -212,6 +221,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleRevocation(scope.row)"
                 >撤回</el-button
               >
@@ -219,6 +229,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleDetail(scope.row)"
                 >详情</el-button
               >
@@ -227,6 +238,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
+                v-preventReClick
                 @click="handleDelete(scope.row)"
                 >删除</el-button
               >

+ 142 - 102
ruoyi-ui/src/views/crmSystem/customerInformation/add.vue

@@ -6,9 +6,9 @@
       finish-status="success"
       class="public-margin-t-20 public-margin-b-20"
     >
-      <el-step title="客户信息" @click="handleStep(0)"></el-step>
-      <el-step title="客户联系人" @click="handleStep(1)"></el-step>
-      <el-step title="账户信息" @click="handleStep(2)"></el-step>
+      <el-step title="客户信息"></el-step>
+      <el-step title="客户联系人"></el-step>
+      <el-step title="账户信息"></el-step>
     </el-steps>
 
     <!-- 客户信息 -->
@@ -36,7 +36,7 @@
               <el-input
                 v-model="formData.customerCode"
                 placeholder="请输入客户编号"
-                clearable
+                disabled
                 :style="{ width: '100%' }"
               ></el-input>
             </el-form-item>
@@ -46,7 +46,7 @@
               <el-input
                 v-model="formData.dhrmCompanyId"
                 placeholder="请输入申请公司"
-                clearable
+                disabled
                 :style="{ width: '100%' }"
               ></el-input>
             </el-form-item>
@@ -65,6 +65,8 @@
           <el-col :span="12">
             <el-form-item label="账期(月)" prop="stockCode">
               <el-input
+                type="number"
+                onkeyup="value=value.replace(/[^\d]/g,0)"
                 v-model="formData.stockCode"
                 placeholder="请输入账期(月)"
                 clearable
@@ -76,6 +78,8 @@
           <el-col :span="12">
             <el-form-item label="年营业额(万元)" prop="yearBusiness">
               <el-input
+                type="number"
+                oninput="if(value.length>12)value=value.slice(0,12)"
                 v-model="formData.yearBusiness"
                 placeholder="请输入年营业额(万元)"
                 clearable
@@ -86,6 +90,7 @@
           <el-col :span="12">
             <el-form-item label="预计项目毛利率(%)" prop="connectedEntities">
               <el-input
+                type="number"
                 v-model="formData.connectedEntities"
                 placeholder="请输入预计项目毛利率(%)"
                 clearable
@@ -95,12 +100,13 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="客户成立时间" prop="registDate">
-              <el-input
+              <el-date-picker
                 v-model="formData.registDate"
+                type="date"
                 placeholder="请输入客户成立时间"
-                clearable
                 :style="{ width: '100%' }"
-              ></el-input>
+              >
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -123,6 +129,7 @@
           <el-col :span="12">
             <el-form-item label="注册资本金(万元)" prop="capital">
               <el-input
+                type="number"
                 v-model="formData.capital"
                 placeholder="请输入注册资本金(万元)"
                 clearable
@@ -144,8 +151,9 @@
           <el-col :span="12">
             <el-form-item label="员工人数" prop="workforce">
               <el-input
+                type="number"
                 v-model="formData.workforce"
-                placeholder="请输入员工人数"
+                placeholder="请输入员工人数(单位:人)"
                 clearable
                 :style="{ width: '100%' }"
               >
@@ -174,7 +182,7 @@
               <el-input
                 v-model="formData.responsibleDept"
                 placeholder="请输入申请部门"
-                clearable
+                disabled
                 :style="{ width: '100%' }"
               ></el-input>
             </el-form-item>
@@ -240,8 +248,18 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="其他性质" prop="otherNature">
+          <el-col :span="12" v-if="formData.customerNature === '9'">
+            <el-form-item
+              label="其他性质"
+              prop="otherNature"
+              :rules="[
+                {
+                  required: formData.customerNature === '9',
+                  message: '请输入其他性质',
+                  trigger: 'blur',
+                },
+              ]"
+            >
               <el-input
                 v-model="formData.otherNature"
                 placeholder="请输入其他性质"
@@ -251,7 +269,17 @@
               </el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col
+            :span="12"
+            v-if="formData.customerType === '4'"
+            :rules="[
+              {
+                required: formData.customerType === '4',
+                message: '请输入其他类型',
+                trigger: 'blur',
+              },
+            ]"
+          >
             <el-form-item label="其他类型" prop="otherCategory">
               <el-input
                 v-model="formData.otherCategory"
@@ -263,7 +291,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="相关资料" prop="fileMap" required>
+            <el-form-item label="相关资料" prop="fileMap">
               <el-upload
                 ref="fileMap"
                 :file-list="fileMapfileList"
@@ -294,6 +322,7 @@
           <div style="width: 94%; margin-left: 65px">
             <el-button
               type="primary"
+              v-preventReClick
               @click="handleAdd"
               icon="el-icon-plus"
               class="public-margin-b-20"
@@ -397,6 +426,7 @@
                     size="mini"
                     type="text"
                     icon="el-icon-edit"
+                    v-preventReClick
                     @click="handleUpdate(scope.row)"
                     v-hasPermi="['system:file:edit']"
                     >修改</el-button
@@ -405,6 +435,7 @@
                     size="mini"
                     type="text"
                     icon="el-icon-delete"
+                    v-preventReClick
                     @click="handleDelete(scope.row)"
                     v-hasPermi="['system:file:remove']"
                     >删除</el-button
@@ -431,7 +462,7 @@
             <el-form
               ref="addUserForm"
               :model="addUserForm"
-              :rules="rules"
+              :rules="UserFormRules"
               label-width="120px"
             >
               <el-row :gutter="30">
@@ -534,8 +565,10 @@
               </el-row>
             </el-form>
             <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitForm">确 定</el-button>
-              <el-button @click="cancel">取 消</el-button>
+              <el-button type="primary" v-preventReClick @click="submitAddUserForm"
+                >确 定</el-button
+              >
+              <el-button @click="cancel" v-preventReClick>取 消</el-button>
             </div>
           </el-dialog>
         </el-row>
@@ -611,11 +644,11 @@
                 :style="{ width: '100%' }"
               >
                 <el-option
-                    v-for="dict in dict.type.SUPPLIER_TAXRATE"
-                    :key='`${dict.value}${dict.label}`'
-                    :label="dict.label"
-                    :value="dict.value"
-                  />
+                  v-for="dict in dict.type.SUPPLIER_TAXRATE"
+                  :key="`${dict.value}${dict.label}`"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -635,9 +668,16 @@
           </el-col>
         </el-row>
         <div class="public-flex-end public-padded-b-30">
-          <!-- <el-button type="primary" @click="last" v-show="active !== 0"> 上一步 </el-button> -->
-          <el-button type="primary" @click="next"> 下一步 </el-button>
-          <!-- v-show="active !== 2" -->
+          <div v-show="active < 2">
+            <el-button type="primary" @click="last" v-preventReClick v-show="active !== 0">
+              上一步
+            </el-button>
+            <el-button type="primary" @click="next" v-preventReClick> 下一步 </el-button>
+          </div>
+          <div v-show="active >= 2">
+            <el-button type="primary" @click="submitForm(1)" v-preventReClick>提交</el-button>
+            <el-button type="primary" @click="submitForm(0)" v-preventReClick>暂存</el-button>
+          </div>
         </div>
       </el-form>
     </section>
@@ -655,12 +695,13 @@ export default {
     "CUSTOMER_TRADE", //客户行业
     "currency_of_registered_capital", //注册资本金币种
     "PROJECT_TYPE", //类型
-    "SUPPLIER_TAXRATE"//税率
+    "SUPPLIER_TAXRATE", //税率
   ],
   data() {
     return {
       active: 0,
       formData: {
+        // 客户信息
         customerName: undefined,
         customerCode: undefined,
         dhrmCompanyId: undefined,
@@ -681,7 +722,18 @@ export default {
         status: undefined,
         fileMap: null,
         mark: undefined,
-        currency: undefined,
+        otherNature: null,
+        otherCategory: null,
+        // 账户信息
+        accountName: null,
+        companyTaxNum: null,
+        bankOfDeposit: null,
+        bankAccount: null,
+        compAddress: null,
+        companyPhone: null,
+        taxpayer: null,
+        customerTaxrate: null,
+        imageFile: null,
       },
       rules: {
         customerName: [
@@ -691,13 +743,6 @@ export default {
             trigger: "blur",
           },
         ],
-        customerCode: [
-          {
-            required: true,
-            message: "请输入客户编号",
-            trigger: "blur",
-          },
-        ],
         dhrmCompanyId: [
           {
             required: true,
@@ -705,15 +750,9 @@ export default {
             trigger: "blur",
           },
         ],
-        website: [
-          {
-            required: true,
-            message: "请输入网址",
-            trigger: "blur",
-          },
-        ],
         stockCode: [
           {
+            // pattern: /^[0-9]*$/,
             required: true,
             message: "请输入账期(月)",
             trigger: "blur",
@@ -824,60 +863,50 @@ export default {
             trigger: "blur",
           },
         ],
+        fileMap: [
+          {
+            required: true,
+            message: "请上传相关资料",
+          },
+        ],
+      },
+      UserFormRules: {
+        name: [
+          {
+            required: true,
+            message: "请输入客户联系人",
+            trigger: "blur",
+          },
+        ],
+        phone: [
+          {
+            required: true,
+            message: "请输入客户客户手机",
+            trigger: "blur",
+          },
+          {
+            pattern: /^1[3456789]\d{9}$/,
+            message: "请输入正确的手机号",
+            trigger: "blur",
+          },
+        ],
+        department: [
+          {
+            required: true,
+            message: "请输入客户所属部门",
+            trigger: "blur",
+          },
+        ],
+        officeAddress: [
+          {
+            required: true,
+            message: "请输入客户办公地址",
+            trigger: "blur",
+          },
+        ],
       },
       imageFileAction: "https://jsonplaceholder.typicode.com/posts/",
       fileMapfileList: [],
-
-      tradeOptions: [
-        {
-          label: "选项一",
-          value: 1,
-        },
-        {
-          label: "选项二",
-          value: 2,
-        },
-      ],
-      responsibleDeptOptions: [
-        {
-          label: "选项一",
-          value: 1,
-        },
-        {
-          label: "选项二",
-          value: 2,
-        },
-      ],
-      customerNatureOptions: [
-        {
-          label: "选项一",
-          value: 1,
-        },
-        {
-          label: "选项二",
-          value: 2,
-        },
-      ],
-      customerTypeOptions: [
-        {
-          label: "选项一",
-          value: 1,
-        },
-        {
-          label: "选项二",
-          value: 2,
-        },
-      ],
-      statusOptions: [
-        {
-          label: "选项一",
-          value: 1,
-        },
-        {
-          label: "选项二",
-          value: 2,
-        },
-      ],
       imageFilefileList: [],
       // 添加客户信息
       // 选中数组
@@ -956,7 +985,6 @@ export default {
       };
       this.resetForm("addUserForm");
     },
-    submitForm() {},
     getList() {},
     // 取消按钮
     cancel() {
@@ -973,17 +1001,29 @@ export default {
       if (this.active-- <= 0) this.active = 0;
     },
     next() {
-      this.$refs["elForm"].validate((valid) => {
-        if (valid) {
-          alert("submit!");
-          if (this.active++ >= 2) this.active = 0;
-        } else {
-          console.log("error submit!!");
-          return false;
-        }
+      this.active++;
+      // this.$refs["elForm"].validate((valid) => {
+      //   if (valid) {
+      //     alert("submit!");
+      //     if (this.active++ >= 2) this.active = 0;
+      //   } else {
+      //     console.log("error submit!!");
+      //     return false;
+      //   }
+      // });
+    },
+    // 新增客户联系人
+    submitAddUserForm() {
+      let that = this;
+      this.$refs["addUserForm"].validate((valid) => {
+        if (!valid) return;
+        // 提交表单
+        that.myUserList.push(that.addUserForm);
+        that.cancel();
       });
     },
-    submitForm() {
+    submitForm(type) {
+      // type=0 暂存 type=1提交
       this.$refs["elForm"].validate((valid) => {
         if (!valid) return;
         // TODO 提交表单

+ 8 - 4
ruoyi-ui/src/views/crmSystem/customerInformation/index.vue

@@ -151,13 +151,14 @@
         </el-col>
       </el-row>
     </SearchFilter>
-    <el-row :gutter="10">
+    <el-row :gutter="10" class="public-margin-b-15">
       <el-col :span="1.5">
         <el-button
           type="primary"
           plain
           icon="el-icon-plus"
           size="mini"
+          v-preventReClick
           @click="handleUserPopAdd"
           >新增客户</el-button
         >
@@ -168,6 +169,7 @@
           plain
           icon="el-icon-plus"
           size="mini"
+          v-preventReClick
           @click="handleApprovePopAdd"
           >指定审批人员</el-button
         >
@@ -214,6 +216,7 @@
             size="mini"
             type="text"
             icon="el-icon-edit"
+            v-preventReClick
             @click="handleUpdate(scope.row)"
             v-hasPermi="['system:file:edit']"
             >修改</el-button
@@ -222,6 +225,7 @@
             size="mini"
             type="text"
             icon="el-icon-delete"
+            v-preventReClick
             @click="handleDelete(scope.row)"
             v-hasPermi="['system:file:remove']"
             >删除</el-button
@@ -266,8 +270,8 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm" v-preventReClick>确 定</el-button>
+        <el-button @click="cancel" v-preventReClick>取 消</el-button>
       </div>
     </el-dialog>
   </div>
@@ -372,7 +376,7 @@ export default {
     handleQuery() {
       console.log("搜索按钮操作");
       this.queryParams.pageNum = 1;
-      // this.getList();
+      this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {

+ 4 - 0
ruoyi-ui/src/views/crmSystem/myTask/detail.vue

@@ -364,6 +364,7 @@
                         size="mini"
                         type="text"
                         icon="el-icon-edit"
+                        v-preventReClick
                         @click="handleUpdate(scope.row)"
                         v-hasPermi="['system:file:edit']"
                         >修改</el-button
@@ -372,6 +373,7 @@
                         size="mini"
                         type="text"
                         icon="el-icon-delete"
+                        v-preventReClick
                         @click="handleDelete(scope.row)"
                         v-hasPermi="['system:file:remove']"
                         >删除</el-button
@@ -484,6 +486,7 @@
   </div>
 </template>
 <script>
+import nodeTableList from "@/components/nodeTableList";
 export default {
   name: "myTaskDetail",
   dicts: [
@@ -496,6 +499,7 @@ export default {
     "PROJECT_TYPE", //类型
     "SUPPLIER_TAXRATE", //税率
   ],
+  components: { nodeTableList },
   data() {
     return {
       activeName: "1",

+ 40 - 4
ruoyi-ui/src/views/crmSystem/myTask/index.vue

@@ -29,10 +29,15 @@
           type="primary"
           icon="el-icon-search"
           size="mini"
+          v-preventReClick
           @click="handleQuery"
           >搜索</el-button
         >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        <el-button
+          icon="el-icon-refresh"
+          size="mini"
+          @click="resetQuery"
+          v-preventReClick
           >重置</el-button
         >
       </el-form-item>
@@ -67,7 +72,12 @@
             align="center"
             prop="processInstanceId"
           /> -->
-          <el-table-column label="当前节点" align="center" prop="taskName" />
+          <el-table-column
+            label="当前节点"
+            align="center"
+            prop="taskName"
+            @click="handleNodeClick(scope.row.procInsId, scope.row.deployId)"
+          />
           <!-- <el-table-column
             label="当前节点key"
             align="center"
@@ -83,6 +93,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleManage(scope.row)"
                 >处理</el-button
               >
@@ -92,6 +103,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleRevocation(scope.row)"
                 >撤回</el-button
               >
@@ -101,6 +113,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleDetail(scope.row)"
                 >详情</el-button
               >
@@ -109,6 +122,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
+                v-preventReClick
                 @click="handleDelete(scope.row)"
                 >删除</el-button
               >
@@ -174,6 +188,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleManage(scope.row)"
                 >处理</el-button
               >
@@ -183,6 +198,7 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleRevocation(scope.row)"
                 >撤回</el-button
               >
@@ -192,14 +208,15 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                v-preventReClick
                 @click="handleDetail(scope.row)"
                 >详情</el-button
               >
-
               <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
+                v-preventReClick
                 @click="handleDelete(scope.row)"
                 >删除</el-button
               >
@@ -216,14 +233,21 @@
         />
       </el-tab-pane>
     </el-tabs>
+    <!--流程图-->
+    <flow :flowData="flowData" />
   </div>
 </template>
 
 <script>
 // import { listFile1,listFile2, getFile, delFile, updateFile } from "@/api/system/file";
-
+// 工作流
+import flow from "@/views/flowable/task/myProcess/detail/flow";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 export default {
   name: "myTaskIndex",
+  components: {
+    flow,
+  },
   data() {
     return {
       // 查询表单参数
@@ -252,6 +276,8 @@ export default {
       // DGT请假流程审批表格数据
       myTaskList: [],
       myList: [],
+      // 模型xml数据
+      flowData: {},
     };
   },
   created() {
@@ -310,6 +336,7 @@ export default {
     // 处理
     handleManage(row) {
       const ids = row.id || this.ids;
+      this.$router.push({ path: "/edit", query: { id: ids } });
     },
     // 撤回
     handleRevocation(row) {
@@ -328,6 +355,7 @@ export default {
     // 详情
     handleDetail(row) {
       const ids = row.id || this.ids;
+      this.$router.push({ path: "/detail", query: { id: ids } });
     },
     /** 删除按钮操作 */
     handleDelete(row) {
@@ -343,6 +371,14 @@ export default {
         })
         .catch(() => {});
     },
+    handleNodeClick(procInsId, deployId) {
+      flowXmlAndNode({
+        procInsId,
+        deployId,
+      }).then((res) => {
+        this.flowData = res.data;
+      });
+    },
   },
 };
 </script>

+ 1 - 1
ruoyi-ui/src/views/crmSystem/myTask/manage.vue

@@ -1,5 +1,5 @@
 <template>
-    <div>111</div>
+    <div>处理</div>
 </template>
 <script>
 export default {