Ver código fonte

临时提交

damon227 1 ano atrás
pai
commit
df3c6f3260

+ 204 - 0
src/views/modules/common/upload-component-v2.vue

@@ -0,0 +1,204 @@
+<template>
+  <section>
+    <el-col :span="8">
+      <el-upload
+        :disabled="display"
+        class="upload-demo"
+        ref="upload"
+        :multiple="multiple"
+        action="#"
+        :accept="accept"
+        :on-preview="handlePreview"
+        :on-remove="handleRemove"
+        :on-change="handleChange"
+        :file-list="fileList"
+        :limit="limit"
+        :on-exceed="handleExceed"
+        :http-request="handleUpload"
+        :auto-upload="false"
+      >
+        <el-button v-show="!display" slot="trigger" size="small" type="primary"
+          >选取文件</el-button
+        >
+        <el-button
+          v-show="!display"
+          style="margin-left: 10px"
+          size="small"
+          type="success"
+          @click="submitUpload"
+          >开始上传</el-button
+        >
+      </el-upload>
+    </el-col>
+    <!-- 图片预览 -->
+    <el-dialog
+      title="图片预览"
+      :append-to-body="true"
+      :visible.sync="previewVisible"
+      width="50%"
+    >
+      <img
+        :src="previewPath"
+        :alt="previewName"
+        style="width: 100%; height: 100%"
+      />
+    </el-dialog>
+  </section>
+</template>
+
+<script>
+import { uploadUrl, downloadUrl, uploadFiles } from "@/api/file";
+import { getFileExt } from "@/api/util";
+export default {
+  name: "upload-component-v2",
+  props: {
+    title: {
+      type: String,
+      default: "附件",
+    },
+    accept: {
+      type: String,
+      default: "",
+    },
+    multiple: {
+      type: Boolean,
+      default: false,
+    },
+    limit: {
+      type: Number,
+      default: 5,
+    },
+    display: {
+      type: Boolean,
+      default: false,
+    },
+    fileObjList: {
+      type: Array,
+      default: () => [],
+    },
+    displayTitle: {
+      type: Boolean,
+      default: true,
+    },
+    displayStar: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  watch: {
+    fileList(newVal) {
+      this.$emit("uploadSuccess", newVal);
+    },
+    fileObjList(newVal) {
+      this.fileList = newVal;
+    },
+  },
+  data() {
+    return {
+      fileList: [],
+      uploadUrl: uploadUrl,
+      previewPath: "",
+      previewName: "",
+      previewVisible: false,
+    };
+  },
+  methods: {
+    handleUpload(file) {
+      function getBase64(file) {
+        return new Promise((resolve, reject) => {
+          const reader = new FileReader();
+          reader.readAsDataURL(file);
+          reader.onload = () => resolve(reader.result);
+          reader.onerror = (error) => reject(error);
+        });
+      }
+
+      return getBase64(file.file).then((res) => {
+        //需要return才会显示上传成功状态,不加return不好使
+        // 开始上传
+        const formData = new FormData();
+        formData.append("file", file.raw);
+        uploadFiles(formData).then(({ data }) => {
+          if (data && data.code === "200") {
+            data.data.forEach((item) => {
+              let fileData = this.fileList.find(
+                (file) => file.name === item.originFileName
+              );
+              fileData.url = item.fileUrl;
+            });
+            this.$message.success("上传成功");
+          } else {
+            this.$message.error("上传失败");
+          }
+        });
+      });
+    },
+    // 上传
+    submitUpload() {
+      this.$refs.upload.submit();
+      // // 判断是否有文件
+      // if (this.fileList.length === 0) {
+      //   return this.$message.warning("请选取文件后再上传");
+      // }
+      // // 判断是否有重复文件
+      // let arr1 = this.fileList.map((i) => i.name);
+      // let arr2 = [...new Set(arr1)];
+      // if (arr1.length !== arr2.length) {
+      //   return this.$message.warning("请去掉重复文件后再上传");
+      // }
+      // // 开始上传
+      // const formData = new FormData();
+      // this.fileList.forEach((file) => {
+      //   formData.append("file", file.raw);
+      // });
+      // uploadFiles(formData).then(({ data }) => {
+      //   if (data && data.code === "200") {
+      //     data.data.forEach((item) => {
+      //       let fileData = this.fileList.find(
+      //         (file) => file.name === item.originFileName
+      //       );
+      //       fileData.url = item.fileUrl;
+      //     });
+      //     this.$message.success("上传成功");
+      //   } else {
+      //     this.$message.error("上传失败");
+      //   }
+      // });
+    },
+    // 移除
+    handleRemove(file, fileList) {
+      this.fileList = fileList;
+    },
+    // 预览
+    handlePreview(file) {
+      if (!file || !file.name || !file.url) {
+        this.$message.error("没有可预览的文件!");
+        return;
+      }
+      let ext = getFileExt(file.name);
+      if (ext === "jpg" || ext === "jpeg" || ext === "png" || ext === "gif") {
+        this.previewPath = downloadUrl + file.url;
+        this.previewName = file.name;
+        this.previewVisible = true;
+      } else {
+        // 弹出新页面显示下载文件
+        window.open(downloadUrl + file.url, "_blank");
+      }
+    },
+    // 改变上传内容
+    handleChange(file, fileList) {
+      this.fileList = fileList;
+    },
+    // 超限
+    handleExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 ${this.limit} 个文件,本次选择了 ${
+          files.length
+        } 个文件,共选择了 ${files.length + fileList.length} 个文件`
+      );
+    },
+  },
+};
+</script>
+
+<style scoped></style>

+ 19 - 9
src/views/modules/cus/communicate-add-or-update.vue

@@ -242,7 +242,7 @@
       <div v-show="detailVisible">
         <div class="title"><span style="color: red">*</span> 任务工单派发</div>
         <el-row>
-          <el-table :data="cusRCommProductVOS" border style="width: 100%">
+          <el-table :data="workInfoList" border style="width: 100%">
             <el-table-column
               label="序号"
               type="index"
@@ -251,7 +251,7 @@
             >
             </el-table-column>
             <el-table-column
-              prop="productName"
+              prop="taskType"
               header-align="center"
               align="center"
               min-width="120"
@@ -260,7 +260,7 @@
             >
             </el-table-column>
             <el-table-column
-              prop="productSpecifications"
+              prop="taskName"
               header-align="center"
               align="center"
               :show-tooltip-when-overflow="true"
@@ -268,14 +268,14 @@
             >
             </el-table-column>
             <el-table-column
-              prop="cnt"
+              prop="rank"
               header-align="center"
               align="center"
               label="级别"
             >
             </el-table-column>
             <el-table-column
-              prop="cnt"
+              prop="content"
               header-align="center"
               align="center"
               min-width="100"
@@ -284,7 +284,7 @@
             >
             </el-table-column>
             <el-table-column
-              prop="cnt"
+              prop="receiver"
               header-align="center"
               align="center"
               min-width="100"
@@ -293,7 +293,7 @@
             >
             </el-table-column>
             <el-table-column
-              prop="cnt"
+              prop="attachList"
               header-align="center"
               align="center"
               min-width="100"
@@ -339,7 +339,7 @@
           <el-button
             type="primary"
             icon="el-icon-plus"
-            @click="inBound"
+            @click="worderAdd"
           ></el-button>
         </el-row>
       </div>
@@ -351,6 +351,7 @@
       >
     </span>
     <add-or-update v-if="inboundVisible" ref="inbound" @addItem="addItem" />
+    <worder-add-or-update v-if="worderVisible" ref="worder" />
   </div>
 </template>
 
@@ -360,9 +361,10 @@ import { getCustomer, getCoDetail } from "@/api/cus";
 import { getDictList } from "@/api/dict";
 import uploadComponent from "../common/upload-component";
 import AddOrUpdate from "../product/template-add-or-update";
+import WorderAddOrUpdate from "../worder/add-or-update";
 export default {
   name: "communicate-add-or-update",
-  components: { AddOrUpdate, uploadComponent },
+  components: { AddOrUpdate, uploadComponent, WorderAddOrUpdate },
   computed: {
     orgId: {
       get() {
@@ -374,6 +376,7 @@ export default {
     return {
       inboundVisible: false,
       detailVisible: false,
+      worderVisible: false,
       visible: false,
       display: false,
       dictType: "material_type",
@@ -386,6 +389,7 @@ export default {
       attachListOther: [],//其他附件
       id: 0,
       cusRCommProductVOS: [],
+      workInfoList: [],
       dataForm: {},
       dataRule: {
         cusId: [
@@ -555,6 +559,12 @@ export default {
         1
       );
     },
+    worderAdd (){
+      this.worderVisible = true;
+      this.$nextTick(() => {
+        this.$refs.worder.init();
+      });
+    }
   },
 };
 </script>

+ 226 - 0
src/views/modules/worder/add-or-update.vue

@@ -0,0 +1,226 @@
+<!-- 工单新增或编辑 -->
+<template>
+  <div class="product-template">
+    <el-dialog
+      :title="!isModify ? '新增工单' : '修改工单'"
+      width="70%"
+      :close-on-click-modal="false"
+      :visible.sync="visible"
+    >
+      <el-form
+        :model="dataForm"
+        :rules="dataRule"
+        ref="dataForm"
+        label-width="120px"
+      >
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="工单编码" prop="taskCode">
+              <el-input
+                v-model="dataForm.taskCode"
+                placeholder="请输入"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="工单类型" prop="taskType">
+              <el-select
+                v-model="dataForm.taskType"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in taskTypeOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="工单级别" prop="rank">
+              <el-select
+                v-model="dataForm.rank"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in rankTypeOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="工单名称" prop="taskName">
+              <el-input
+                v-model="dataForm.taskName"
+                placeholder="请输入"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="工单内容" prop="content">
+              <el-input
+                v-model="dataForm.content"
+                placeholder="请输入"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="要求完成时间" prop="planCompletionTime">
+              <el-date-picker
+                v-model="dataForm.planCompletionTime"
+                value-format="yyyy-MM-dd"
+                type="date"
+                style="width: 100%"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row">
+          <el-col :span="8">
+            <el-form-item label="任务接收人" prop="receiver">
+              <el-select
+                v-model="dataForm.receiver"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.userId"
+                  :label="item.name"
+                  :value="item.userId"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
+            <el-form-item label="备注" prop="notes">
+              <el-input
+                type="textarea"
+                v-model="dataForm.notes"
+                placeholder="备注"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="my-row"> </el-row>
+        <el-row class="my-row">
+          <el-col :span="24">
+            <el-form-item label="工单附件" prop="attchList">
+              <upload-component-v2
+                :display="display"
+                :displayStar="true"
+                :title="'工单附件'"
+                :accept="'*'"
+                :file-obj-list="attachList"
+                @uploadSuccess="uploadSuccess"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer">
+        <el-button @click="onChose">取消</el-button>
+        <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import uploadComponentV2 from "../common/upload-component-v2";
+import { getUserList } from "@/api/user";
+export default {
+  name: "worder-add-or-update",
+  components: { uploadComponentV2 },
+  data() {
+    return {
+      id: 0,
+      visible: false,
+      isModify: false,
+      display: false,
+      bizType: 1,
+      dataForm: {},
+      attachList: [],
+      userList: [],
+      taskTypeOption: [
+        { label: "开始", value: "start" },
+        { label: "生产", value: "produce" },
+        { label: "检验", value: "check" },
+        { label: "总检", value: "t-check" },
+        { label: "结束", value: "end" },
+        { label: "常规", value: "routine" },
+      ],
+      rankTypeOption: [
+        { label: "普通", value: 1 },
+        { label: "紧急", value: 2 },
+        { label: "加急", value: 3 },
+      ],
+      dataRule: {
+        taskCode: [
+          { required: true, message: "请输入工单编码", trigger: "blur" },
+        ],
+        taskType: [
+          { required: true, message: "请选择工单类型", trigger: "change" },
+        ],
+        rank: [
+          { required: true, message: "请选择工单级别", trigger: "change" },
+        ],
+        taskName: [
+          { required: true, message: "请输入工单名称", trigger: "blur" },
+        ],
+        content: [
+          { required: true, message: "请输入工单内容", trigger: "blur" },
+        ],
+        planCompletionTime: [
+          { required: true, message: "请选择要求完成时间", trigger: "blur" },
+        ],
+        receiver: [
+          { required: true, message: "请输入工单任务接收人", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  methods: {
+    onChose() {
+      this.visible = false;
+    },
+    // 初始化
+    async init(id) {
+      this.id = id || 0;
+      this.visible = true;
+      await getUserList().then(({ data }) => {
+        if (data && data.code === "200") {
+          this.userList = data.data.records;
+        }
+      });
+    },
+    // 表单提交
+    dataFormSubmit() {
+      this.$refs["dataForm"].validate((valid) => {
+        if (valid) {
+          this.visible = false;
+          this.$emit("addItem", this.dataForm);
+        }
+      });
+    },
+    prodSelected(item) {
+      this.dataForm.productId = item.value;
+      this.dataForm.relatedProduct = item.label;
+    },
+    uploadSuccess(fileList) {
+      this.attachList = fileList;
+    },
+  },
+};
+</script>
+
+<style scoped></style>