Procházet zdrojové kódy

feature: 完善合同创建审批文件上传

liuyaqi před 2 roky
rodič
revize
83884ea09f

+ 85 - 18
src/views/contract/components/ApplyContract.vue

@@ -31,36 +31,56 @@
           show-word-limit
           type="textarea" />
       </el-form-item>
+      <el-form-item label="文件" prop="file">
+        <el-upload
+          ref="uploadRef"
+          action="#"
+          :auto-upload="false"
+          :file-list="fileList"
+          :limit="1"
+          :on-change="
+            (file) => {
+              return setFile(file)
+            }
+          ">
+          <el-button size="mini" type="primary">点击上传</el-button>
+        </el-upload>
+      </el-form-item>
     </el-form>
     <span slot="footer">
-      <el-button size="mini" type="primary" @click="handleSubmit">确定</el-button>
+      <el-button :loading="loading" size="mini" type="primary" @click="handleSubmit">确定</el-button>
       <el-button size="mini" @click="visible = false">取消</el-button>
     </span>
   </el-dialog>
 </template>
 
 <script>
-  import contractApi from '@/api/contract'
+  import axios from 'axios'
+  import { getToken } from '@/utils/token'
   import to from 'await-to-js'
   export default {
     components: {},
     data() {
       return {
         visible: false,
+        loading: false,
+        fileList: [],
+        fileSettings: {
+          // 文件配置信息
+          fileSize: 52428800,
+          fileTypes: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          pictureSize: 52428800,
+          pictureTypes: '.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          types: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.mp4,.txt',
+          videoSize: 104857600,
+          videoType: '.mp4',
+        },
         form: {
           id: 0,
           contractModel: '',
           terms: '',
           payTerms: '',
-          file: [
-            // {
-            //   spaceId: '',
-            //   fileId: '',
-            //   fileName: '',
-            //   fileSize: 0,
-            //   fileType: '',
-            // },
-          ],
+          file: null,
         },
         rules: {
           contractModel: [{ required: true, trigger: 'blur', message: '请选择合同模板' }],
@@ -71,23 +91,70 @@
     },
     methods: {
       handleClose() {
+        this.fileList = []
+        this.loading = false
         this.form = {
           id: 0,
           contractModel: '',
           terms: '',
           payTerms: '',
-          file: [],
+          file: null,
         }
       },
+      // 上传图片
+      setFile(file) {
+        this.form.file = file.raw
+        return true
+      },
       async handleSubmit() {
         const [valid] = await to(this.$refs.form.validate())
         if (valid == false) return
-        if (this.form.file.length == 0) return this.$message.warning('附件不能为空')
-        const [err, res] = await to(contractApi.commit(this.form))
-        if (err) return
-        this.$message.success(res.msg)
-        this.visible = false
-        this.$emit('refresh')
+        if (this.form.file == null) return this.$message.warning('附件不能为空')
+        // const [err, res] = await to(contractApi.ss(this.form))
+        // if (err) return
+
+        let formData = new FormData()
+        formData.append('file', this.form.file)
+        formData.append('contractId', this.form.id)
+        formData.append('contractModel', this.form.contractModel)
+        formData.append('terms', this.form.terms)
+        formData.append('payTerms', this.form.payTerms)
+        this.loading = true
+        axios({
+          method: 'post',
+          url: process.env.VUE_APP_MicroSrvProxy_API + process.env.VUE_APP_ParentPath,
+          // url: 'http://192.168.0.51:9981/dashoo.dev.opms.parent-0.0.1',
+          data: formData,
+          headers: {
+            Authorization: 'Bearer ' + getToken(),
+            'X-RPCX-SerializeType': '1',
+            'X-RPCX-ServicePath': 'CtrContractHandler',
+            'X-RPCX-ServiceMethod': 'CommitWithFile',
+            'content-type': 'multipart/form-data',
+            tenant: process.env.VUE_APP_TENANT,
+          },
+        })
+          .then((res) => {
+            this.loading = false
+            console.log(res)
+            if (res.data.code != 0) {
+              this.$message({
+                type: 'error',
+                message: res.data.msg,
+              })
+            } else {
+              this.visible = false
+              this.$emit('refresh')
+            }
+          })
+          .catch((err) => {
+            this.loading = false
+            console.error(err)
+            this.$message({
+              type: 'warning',
+              message: '系统异常',
+            })
+          })
       },
     },
   }

+ 19 - 16
src/views/contract/index.vue

@@ -32,7 +32,7 @@
           </el-form-item>
           <el-form-item prop="custId">
             <el-select v-model="queryForm.approStatus" clearable placeholder="审批状态">
-              <el-option v-for="item in approStatusOption" :key="item.id" :label="item.label" :value="item.id" />
+              <el-option v-for="(v, k) in approStatusOption" :key="k" :label="v" :value="k" />
             </el-select>
           </el-form-item>
           <el-form-item>
@@ -67,6 +67,9 @@
           <span v-else-if="item.prop === 'contractAmount'">
             {{ formatPrice(row.contractAmount) }}
           </span>
+          <span v-else-if="item.prop === 'approStatus'">
+            {{ approStatusOption[row.approStatus] }}
+          </span>
           <span v-else-if="item.label === '合同有效时间'">
             {{ parseTime(row.contractStartTime, '{y}-{m}-{d}') }}~{{ parseTime(row.contractEndTime, '{y}-{m}-{d}') }}
           </span>
@@ -116,7 +119,7 @@
           <el-button v-if="scope.row.approStatus == '10'" type="text" @click="handleApply(scope.row.id)">
             提交审核
           </el-button>
-          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button v-if="scope.row.approStatus == '10'" type="text" @click="handleEdit(scope.row)">编辑</el-button>
           <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
@@ -155,13 +158,13 @@
     data() {
       return {
         height: this.$baseTableHeight(2),
-        approStatusOption: [
-          { id: '10', label: '待提交审核' },
-          { id: '20', label: '待审核' },
-          { id: '30', label: '审核已同意' },
-          { id: '40', label: '审核已拒绝' },
-          { id: '50', label: '审核已撤销' },
-        ],
+        approStatusOption: {
+          10: '待提交审核',
+          20: '待审核',
+          30: '审核已同意',
+          40: '审核已拒绝',
+          50: '审核已撤销',
+        },
         contractId: [], //当前合同id
         listLoading: false,
         layout: 'total, sizes, prev, pager, next, jumper',
@@ -197,13 +200,6 @@
             sortable: false,
             disableCheck: false,
           },
-          // {
-          //   label: '审批状态',
-          //   width: '100px',
-          //   prop: 'approStatus',
-          //   sortable: false,
-          //   disableCheck: false,
-          // },
           {
             label: '所在省',
             width: '100px',
@@ -274,6 +270,13 @@
             sortable: false,
             disableCheck: false,
           },
+          {
+            label: '审批状态',
+            width: '100px',
+            prop: 'approStatus',
+            sortable: false,
+            disableCheck: false,
+          },
         ],
       }
     },

+ 21 - 3
src/views/customer/components/Edit.vue

@@ -42,12 +42,22 @@
           <el-form-item label="所在地区" required>
             <el-row :gutter="4" style="width: 100%; padding-top: 32px">
               <el-col :span="8">
-                <el-select v-model="editForm.province" placeholder="省" value-key="id" @change="provinceChange">
+                <el-select
+                  v-model="editForm.province"
+                  :disabled="areaEditDisable"
+                  placeholder="省"
+                  value-key="id"
+                  @change="provinceChange">
                   <el-option v-for="item in provinceOptions" :key="item.id" :label="item.distName" :value="item" />
                 </el-select>
               </el-col>
               <el-col :span="8">
-                <el-select v-model="editForm.city" placeholder="市" value-key="id" @change="cityChange">
+                <el-select
+                  v-model="editForm.city"
+                  :disabled="areaEditDisable"
+                  placeholder="市"
+                  value-key="id"
+                  @change="cityChange">
                   <el-option
                     v-for="item in editForm.province ? editForm.province.children : []"
                     :key="item.id"
@@ -56,7 +66,12 @@
                 </el-select>
               </el-col>
               <el-col :span="8">
-                <el-select v-model="editForm.region" placeholder="区" value-key="id" @change="$forceUpdate()">
+                <el-select
+                  v-model="editForm.region"
+                  :disabled="areaEditDisable"
+                  placeholder="区"
+                  value-key="id"
+                  @change="$forceUpdate()">
                   <el-option
                     v-for="item in editForm.city ? editForm.city.children : []"
                     :key="item.id"
@@ -130,6 +145,7 @@
         title: '新增客户信息',
         // 新增编辑客户弹窗
         editVisible: false,
+        areaEditDisable: false,
         editForm: {
           custName: '', // 客户名称
           abbrName: '', // 助记名
@@ -165,9 +181,11 @@
         if (!ids) {
           this.title = '新增客户信息'
           this.editVisible = true
+          this.areaEditDisable = false
           return
         }
         this.title = '编辑客户'
+        this.areaEditDisable = true
         const [err, res] = await to(api.getDetail({ ids }))
         if (err) return
         if (res.data.list[0]) this.editForm = res.data.list[0]