zl程序教程

您现在的位置是:首页 >  后端

当前栏目

uview图片上传多张

上传 图片
2023-09-14 09:06:32 时间
<template>
  <view class="contain-box">
    <u-navbar
      :title="title"
      :is-back="true"
      back-icon-color="#fff"
      :background="background"
      :border-bottom="false"
      title-color="#fff"
    >
    </u-navbar>
    <view class="form-box">
      <u-form :model="form" ref="uForm" labelWidth="200" :toast="false">
        <!-- 报修区域类型 -->
        <u-form-item label="报修区域类型" prop="areaType" borderBottom required>
          <u-input
            v-model="areaTypeLabel"
            disabled
            disabledColor="#ffffff"
            placeholder="请选择区域类型"
            @click="showTypeFun"
          ></u-input>
          <u-icon slot="right" name="arrow-right"></u-icon>
        </u-form-item>
        <u-select :list="listType" v-model="showType" @confirm="getShowtype">
        </u-select>
        <!-- 报修类型 -->
        <u-form-item label="报修类型" prop="warrantyType" borderBottom required>
          <u-input
            v-model="warrantyLabel"
            disabled
            disabledColor="#ffffff"
            placeholder="请选择类型"
            @click="showTypeFun2"
          ></u-input>
          <u-icon slot="right" name="arrow-right"></u-icon>
        </u-form-item>
        <u-select
          :list="warrantyTypeList"
          v-model="showType2"
          @confirm="getShowtype2"
          label-name="text"
          value-name="value"
        >
        </u-select>
        <u-form-item label="报修名称" prop="name" required>
          <u-input v-model="form.name" placeholder="请输入名称" />
        </u-form-item>
        <u-form-item label="报修位置" prop="reportAdress" required>
          <u-input v-model="form.reportAdress" placeholder="请输入位置" />
        </u-form-item>
        <u-form-item label="事件描述" prop="description" required>
          <u-input
            v-model="form.description"
            type="textarea"
            height="150"
            :auto-height="true"
            :border="true"
            placeholder="请输入内容(最多200字)"
            :maxlength="200"
          />
        </u-form-item>
        <u-form-item label="现场图片">
          <u-upload
            :max-count="9"
            upload-text="最多9张"
            @on-success="successUpload"
            @on-change="changeUpload"
            @on-error="errorUpload"
            @on-remove="removeUpload"
            :action="action_"
            :file-list="fileList"
            :max-size="5 * 1024 * 1024"
            :header="header_"
          >
          </u-upload>
        </u-form-item>
        <u-form-item label="联系人" prop="reportUserName" required>
          <u-input
            v-model="form.reportUserName"
            placeholder="请输入"
            disabled
          />
        </u-form-item>
        <u-form-item label="联系方式" prop="reportUserMobile" required>
          <u-input v-model="form.reportUserMobile" placeholder="请输入" />
        </u-form-item>
        <u-form-item label="所属企业" prop="reportEnterName" required>
          <u-input v-model="form.reportEnterName" placeholder="请输入" />
        </u-form-item>
      </u-form>
      <u-button @click="submit('uForm')" type="primary" style="margin-top: 15px"
        >提交工单</u-button
      >
    </view>
  </view>
</template>

<script>
import API from "@/api/api.js";
import dev from "@/api/dev.js";
import { listDictItems, workOrderinsert } from "@/api/repairs.js";
let urlAPI = require("@/static/config.js");
export default {
  data() {
    const validdaterateprop = (rule, value, callback) => {
      if (value <= 0) {
        callback(new Error("请评分"));
      } else {
        callback();
      }
    };
    return {
      title: "报修添加",
      background: {
        backgroundColor: "#558eff",
      },
      showType: false,
      showType2: false,
      listType: [
        {
          label: "室内",
          value: "1",
        },
        {
          label: "室外",
          value: "2",
        },
      ],
      areaTypeLabel: "",
      warrantyLabel: "",
      form: {
        areaType: "",
        warrantyType: "",
        name: "",
        reportAdress: "",
        description: "",
        imgPath: "",
        //取 uni.getStorageSync();
        reportUserName: uni.getStorageSync("userName_u"),
        reportUserMobile: uni.getStorageSync("contactWay_u"),
        reportEnterName:
          uni.getStorageSync("enterpriseName_u") &&
          uni.getStorageSync("enterpriseName_u") !== "null"
            ? uni.getStorageSync("enterpriseName_u")
            : "",
        reportEnterId: uni.getStorageSync("enterpriseId_u"),
        reportUserId: uni.getStorageSync("id_u"),
        id: "",
      },
      rules: {
        areaType: [
          {
            required: true,
            message: "请选择报修类型",
            trigger: ["blur", "change"],
          },
        ],
        warrantyType: [
          {
            required: true,
            message: "请选择",
            trigger: ["blur", "change"],
          },
        ],
        name: [
          {
            required: true,
            message: "请输入名称",
            trigger: ["blur", "change"],
          },
        ],
        reportAdress: [
          {
            required: true,
            message: "请输入位置",
            trigger: ["blur", "change"],
          },
        ],
        reportUserName: [
          {
            required: true,
            message: "请输入名称",
            trigger: ["blur", "change"],
          },
        ],
        reportUserMobile: [
          {
            required: true,
            message: "请输入联系方式",
            trigger: ["blur", "change"],
          },
        ],
        reportEnterName: [
          {
            required: true,
            message: "请输入所属企业",
            trigger: ["blur", "change"],
          },
        ],
        description: [
          {
            required: true,
            max: 200,
            message: "请输入描述",
            trigger: ["blur"],
          },
        ],
      },
      // action_: dev.imgUrl + "/sdfs/file/uploadImage",
      action_: urlAPI.baseUrl_applet + "/sdfs/file/uploadImage",
      header_: {
        "author-token-key": uni.getStorageSync("token"),
      },
      fileList: [],
      warrantyTypeList: [],
    };
  },
  onLoad(e) {
    console.log("e", e);
    this._listDictItems();
  },
  // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  onReady() {
    if (this.$refs.uForm) {
      this.$refs.uForm.setRules(this.rules);
    }
    console.log("process.env.NODE_ENV", process.env.NODE_ENV);
  },
  watch: {},
  methods: {
    //报修类型
    _listDictItems() {
      listDictItems().then((res) => {
        if (res.data.code == "00000") {
          this.warrantyTypeList = res.data.data || [];
        }
      });
    },
    showTypeFun() {
      this.showType = true;
    },
    getShowtype(e) {
      this.form.areaType = e[0].value;
      this.areaTypeLabel = e[0].label;
    },
    showTypeFun2(e) {
      this.showType2 = true;
    },
    getShowtype2(e) {
      this.form.warrantyType = e[0].value;
      this.warrantyLabel = e[0].label;
    },
    submit(name) {
      this.$refs[name].validate((valid) => {
        if (valid) {
          const params = Object.assign({}, this.form);
          workOrderinsert(params).then((res) => {
            if (res.data.code == "00000") {
              uni.showToast({
                title: "添加成功",
              });
              setTimeout(() => {
                uni.navigateTo({
                  url: `/pages/repairs/repairs`,
                });
              }, 1000);
            } else {
              uni.showToast({
                icon: "none",
                title: res.data.desc,
              });
            }
          });
        } else {
          console.log("验证失败");
        }
      });
    },
    successUpload(data, index, lists, name) {
      if (data.code == "00000") {
        let imgarr = [];
        imgarr = lists.map((item) => {
          return item.response.data;
        });
        this.form.imgPath = imgarr.join(",");
      }
    },
    changeUpload(res, index, lists, name) {
      // console.log("changeUpload", lists);
    },
    errorUpload(res, index, lists, name) {},
    removeUpload(index, lists, name) {
      let imgarr = [];
      imgarr = lists.map((item) => {
        return item.response.data;
      });
      this.form.imgPath = imgarr.join(",");
    },
  },
};
</script>

<style lang="scss">
.contain-box {
  height: 100vh;
  background-color: #fff;
  .form-box {
    padding: 18px;
  }
}
</style>