Przeglądaj źródła

feat: 新增表单编号管理功能

yusheng 1 miesiąc temu
rodzic
commit
9312eb131a

+ 125 - 0
src/api/bpm/components/formCodeManagement/index.js

@@ -0,0 +1,125 @@
+import request from '@/utils/request';
+
+/**
+ * 表单编号管理API
+ */
+
+/**
+ * 新增表单编号
+ * @param {Object} data 表单编号数据
+ * @returns {Promise}
+ */
+export async function addFormCode(data) {
+  const res = await request.post('/main/form/number/config/add', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 变更表单编号
+ * @param {Object} data 表单编号数据
+ * @returns {Promise}
+ */
+export async function changeFormCode(data) {
+  const res = await request.post('/main/form/number/config/change', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除表单编号
+ * @param {string|number} id 表单编号ID
+ * @returns {Promise}
+ */
+export async function deleteFormCode(id) {
+  const res = await request.get(`/main/form/number/config/delete/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 停用表单编号
+ * @param {string|number} id 表单编号ID
+ * @returns {Promise}
+ */
+export async function disableFormCode(id) {
+  const res = await request.get(`/main/form/number/config/disable/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 启用表单编号
+ * @param {string|number} id 表单编号ID
+ * @returns {Promise}
+ */
+export async function enableFormCode(id) {
+  const res = await request.put(`/main/form/number/config/enable/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据ID查询表单编号详情
+ * @param {string|number} id 表单编号ID
+ * @returns {Promise}
+ */
+export async function getFormCodeById(id) {
+  const res = await request.get(`/main/form/number/config/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询表单编号历史版本
+ * @param {string|number} formCodeId 表单编号ID
+ * @returns {Promise}
+ */
+export async function getFormCodeHistoryList(formCodeId) {
+  const res = await request.get(
+    `/main/form/number/config/getHistoryList/${formCodeId}`
+  );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 分页查询表单编号列表
+ * @param {Object} data 查询参数
+ * @returns {Promise}
+ */
+export async function getFormCodePage(data) {
+  const res = await request.post(`/main/form/number/config/page`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 更新表单编号
+ * @param {Object} data 表单编号数据
+ * @returns {Promise}
+ */
+export async function updateFormCode(data) {
+  const res = await request.post('/main/form/number/config/update', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+

+ 224 - 0
src/views/bpm/handleTask/components/formCodeManagement/formCodeDialog.vue

@@ -0,0 +1,224 @@
+<template>
+  <el-form
+    ref="formRef"
+    :model="form"
+    :rules="rules"
+    label-width="130px"
+    size="small"
+    style="margin-top: 15px"
+  >
+    <!-- 第一行:表单编号编码 + 来源表单编号编码 -->
+    <el-row :gutter="20">
+      <el-col :span="12">
+        <el-form-item label="表单编号编码" prop="code">
+          <el-input
+            v-model="form.code"
+            placeholder="系统自动生成,唯一码"
+            disabled
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="来源表单编号编码" prop="sourceCode">
+          <el-input v-model="form.sourceCode" placeholder=" " disabled />
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+    <!-- 第二行:表单编号名称 + 版本 -->
+    <el-row :gutter="20">
+      <el-col :span="12">
+        <el-form-item label="表单编号名称" prop="name" required>
+          <el-input
+            v-model="form.name"
+            placeholder="请输入"
+            disabled
+            clearable
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="版本" prop="formVersion" required>
+          <el-input
+            v-model="form.formVersion"
+            placeholder="请输入"
+            disabled
+            clearable
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+    <!-- 第三行:表单编号 -->
+    <el-row :gutter="20">
+      <el-col :span="12">
+        <el-form-item label="表单编号" prop="formNumber" required>
+          <el-input
+            v-model="form.formNumber"
+            placeholder="请输入"
+            disabled
+            clearable
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+    <!-- 第四行:选择单据编码 + 单据编码名称 -->
+    <el-row :gutter="20">
+      <el-col :span="12">
+        <el-form-item label="选择单据编码" prop="documentCode" required>
+          <el-input v-model="form.documentCode" placeholder="请选择" disabled />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="单据编码名称" prop="documentName">
+          <el-input
+            v-model="form.documentName"
+            placeholder="根据选择的单据编码,自动带出名称"
+            disabled
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+    <!-- 第五行:生效日期 + 状态 -->
+    <el-row :gutter="20">
+      <el-col :span="12">
+        <el-form-item label="生效日期" prop="effectiveDate" required>
+          <el-date-picker
+            v-model="form.effectiveDate"
+            type="date"
+            placeholder="年/月/日"
+            value-format="yyyy-MM-dd"
+            disabled
+            style="width: 100%"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="状态" prop="status" required>
+          <el-switch
+            v-model="form.status"
+            disabled
+            :active-value="1"
+            :inactive-value="0"
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  import { getFormCodeById } from '@/api/bpm/components/formCodeManagement';
+
+  const defaultForm = {
+    code: '',
+    documentCode: '',
+    documentId: '',
+    documentName: '',
+    effectiveDate: '',
+    formNumber: '',
+    formVersion: '',
+    name: '',
+    sourceCode: '',
+    sourceId: '',
+    status: 0
+  };
+
+  export default {
+    props: {
+      businessId: {
+        type: String,
+        default: ''
+      }
+    },
+    data() {
+      return {
+        form: {
+          ...defaultForm
+        },
+        rules: {}
+      };
+    },
+    created() {
+      this.init();
+    },
+    methods: {
+      init() {
+        getFormCodeById(this.businessId).then((res) => {
+          this.form = res;
+        });
+      }
+    }
+  };
+</script>
+
+<style scoped>
+  .upload-container {
+    display: flex;
+    align-items: flex-start;
+    gap: 20px;
+  }
+
+  .seal-uploader {
+    width: 200px;
+    height: 200px;
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+    background-color: #f5f7fa;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+  .seal-uploader:hover {
+    border-color: #409eff;
+  }
+
+  .uploader-placeholder {
+    text-align: center;
+    color: #8c939d;
+  }
+
+  .uploader-placeholder .el-icon-picture-outline {
+    font-size: 48px;
+    margin-bottom: 10px;
+  }
+
+  .upload-text {
+    display: flex;
+    gap: 10px;
+    justify-content: center;
+  }
+
+  .delete-btn {
+    color: #f56c6c;
+  }
+
+  .seal-image {
+    width: 100%;
+    height: 100%;
+    object-fit: contain;
+  }
+
+  .upload-tips {
+    flex: 1;
+    font-size: 12px;
+    color: #606266;
+    line-height: 1.8;
+  }
+
+  .upload-tips p {
+    margin: 0;
+    padding: 0;
+  }
+
+  .upload-tips p:first-child {
+    font-weight: bold;
+    margin-bottom: 5px;
+  }
+</style>

+ 134 - 0
src/views/bpm/handleTask/components/formCodeManagement/submit.vue

@@ -0,0 +1,134 @@
+<template>
+  <el-col :span="16" :offset="6">
+    <el-form label-width="100px" ref="formRef" :model="form">
+      <el-form-item
+        label="审批建议"
+        style="margin-bottom: 20px"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <el-input
+          type="textarea"
+          v-model="form.reason"
+          placeholder="请输入审批建议"
+        />
+      </el-form-item>
+    </el-form>
+    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
+      <el-button
+        icon="el-icon-edit-outline"
+        type="success"
+        size="mini"
+        v-click-once
+        @click="handleAudit(1)"
+        >通过
+      </el-button>
+
+      <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        v-click-once
+        @click="handleAudit(0)"
+        >驳回
+      </el-button>
+      <el-dropdown
+        @command="(command) => handleCommand(command)"
+        style="margin-left: 30px"
+      >
+        <span class="el-dropdown-link">
+          更多<i class="el-icon-arrow-down el-icon--right"></i>
+        </span>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item command="cancel">作废</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+  </el-col>
+</template>
+
+<script>
+  import { approveTaskWithVariables, rejectTask,cancelTask } from '@/api/bpm/task';
+
+  export default {
+    name: '',
+
+    props: {
+      businessId: {
+        default: ''
+      },
+      taskId: {
+        default: ''
+      },
+      id: {
+        default: ''
+      },
+      taskDefinitionKey: {
+        default: ''
+      }
+    },
+    data() {
+      return {
+        visible: false,
+        form: {
+          reason: '同意'
+        },
+       
+      };
+    },
+    created() {},
+    methods: {
+      async handleAudit(status) {
+        await this._approveTaskWithVariables(status);
+      },
+      //更多
+      handleCommand(command) {
+        if (command === 'cancel') {
+          this.$confirm('是否确认作废?', {
+            type: 'warning',
+            cancelButtonText: '取消',
+            confirmButtonText: '确定'
+          })
+            .then(() => {
+              cancelTask({
+                id: this.id,
+                taskId: this.taskId,
+                reason: this.form.reason,
+                businessId: this.businessId
+              })
+                .then(() => {
+                  this.$emit('handleClose');
+                })
+                .catch(() => {
+                  this.$message.error('流程作废失败');
+                });
+            })
+            .catch(() => {});
+        }
+      },
+      async _approveTaskWithVariables(status) {
+        let variables = {
+          pass: !!status
+        };
+        let API = !!status ? approveTaskWithVariables : rejectTask;
+        API({
+          id: this.taskId,
+          reason: this.form.reason,
+          variables
+        }).then((res) => {
+          if (res.data.code != '-1') {
+            this.$emit('handleAudit', {
+              status,
+              title: status === 0 ? '驳回' : ''
+            });
+          }
+        });
+      }
+    }
+  };
+</script>
+
+<style lang="scss"></style>

+ 1 - 42
src/views/bpm/handleTask/components/sealManagement/sealDialog.vue

@@ -181,51 +181,10 @@
     },
     data() {
       return {
-        sealTypeList: [
-          {
-            label: '法律效力章',
-            value: '1'
-          },
-          {
-            label: '财务专用章',
-            value: '2'
-          },
-          {
-            label: '业务专用章',
-            value: '3'
-          },
-          {
-            label: '内部管理章',
-            value: '4'
-          }
-        ],
         form: {
           ...defaultForm
         },
-        rules: {
-          name: [
-            { required: true, message: '请输入印章名称', trigger: 'blur' }
-          ],
-          sealType: [
-            { required: true, message: '请选择印章类型', trigger: 'change' }
-          ],
-          version: [{ required: true, message: '请输入版本', trigger: 'blur' }],
-          isLongTerm: [
-            { required: true, message: '请选择是否长期有效', trigger: 'change' }
-          ],
-          status: [
-            { required: true, message: '请选择状态', trigger: 'change' }
-          ],
-          imgUrl: [
-            { required: true, message: '请上传印章图片', trigger: 'change' }
-          ],
-          validStartDate: [
-            { required: true, message: '请选择', trigger: 'change' }
-          ],
-          validEndDate: [
-            { required: true, message: '请选择', trigger: 'change' }
-          ]
-        }
+        rules: {}
       };
     },
     created() {