123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641 |
- <template>
- <div>
- <el-form ref="form" :model="form" :rules="rules" label-width="160px">
- <div class="flexBox">
- <el-form-item label="车辆模型标识:" prop="modelLabel">
- <el-input
- placeholder="请输入"
- maxlength="100"
- v-autoTrim="{ obj: form, key: 'modelLabel' }"
- v-model="form.modelLabel"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车辆类型:" prop="vehicleType">
- <el-input
- placeholder="请输入"
- maxlength="100"
- v-autoTrim="{ obj: form, key: 'vehicleType' }"
- v-model="form.vehicleType"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车辆型号:" prop="vehicleModel">
- <el-input
- placeholder="请输入"
- maxlength="100"
- v-autoTrim="{ obj: form, key: 'vehicleModel' }"
- v-model="form.vehicleModel"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车辆颜色:" prop="vehicleColour">
- <el-input
- placeholder="请输入"
- maxlength="100"
- v-autoTrim="{ obj: form, key: 'vehicleColour' }"
- v-model="form.vehicleColour"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="序号:" prop="sort">
- <el-input
- placeholder="请输入"
- maxlength="10"
- v-autoTrim="{ obj: form, key: 'sort' }"
- v-model="form.sort"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="是否有效:" prop="valid">
- <el-select v-model="form.valid">
- <el-option
- v-for="item in validList"
- :label="item.caption"
- :value="item.code"
- :key="item.code"
- ></el-option>
- </el-select>
- </el-form-item>
- </div>
- <div class="titlePanel">
- <div class="titlePanelBor">控制参数</div>
- </div>
- <div class="flexBox">
- <el-form-item label="最大速度(km/h):" prop="maxSpeed">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'maxSpeed' }"
- v-model="form.maxSpeed"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="发动机功率(kW):" prop="enginePower">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'enginePower' }"
- v-model="form.enginePower"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="最大减速度(m/s²):" prop="maxDeceleration">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'maxDeceleration' }"
- v-model="form.maxDeceleration"
- >
- </el-input>
- </el-form-item>
- <el-form-item
- label="最大转向角度(deg):"
- prop="maxSteeringAngle"
- >
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'maxSteeringAngle' }"
- v-model="form.maxSteeringAngle"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="驱动方式:" prop="wheelDrive">
- <el-select v-model="form.wheelDrive">
- <el-option
- v-for="item in wheelDriveList"
- :label="item.caption"
- :value="item.code"
- :key="item.code"
- ></el-option>
- </el-select>
- </el-form-item>
- </div>
- <div class="titlePanel">
- <div class="titlePanelBor">效率参数</div>
- </div>
- <div class="flexBox">
- <el-form-item label="总效率:" prop="overallEfficiency">
- <el-input
- placeholder="请输入"
- maxlength="9"
- v-autoTrim="{ obj: form, key: 'overallEfficiency' }"
- v-model="form.overallEfficiency"
- >
- </el-input>
- </el-form-item>
- <el-form-item
- label="前表面有效面积(㎡):"
- prop="frontSurfaceEffective"
- >
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{
- obj: form,
- key: 'frontSurfaceEffective',
- }"
- v-model="form.frontSurfaceEffective"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="空气阻力系数:" prop="airDragCoefficient">
- <el-input
- placeholder="请输入"
- maxlength="9"
- v-autoTrim="{
- obj: form,
- key: 'airDragCoefficient',
- }"
- v-model="form.airDragCoefficient"
- >
- </el-input>
- </el-form-item>
- <el-form-item
- label="滚动阻力系数:"
- prop="rollingResistanceCoefficient"
- >
- <el-input
- placeholder="请输入"
- maxlength="9"
- v-autoTrim="{
- obj: form,
- key: 'rollingResistanceCoefficient',
- }"
- v-model="form.rollingResistanceCoefficient"
- >
- </el-input>
- </el-form-item>
- </div>
- <div class="titlePanel">
- <div class="titlePanelBor">几何参数</div>
- </div>
- <div class="flexBox">
- <el-form-item label="车轮直径(m):" prop="wheelDiameter">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'wheelDiameter' }"
- v-model="form.wheelDiameter"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车前距(m):" prop="frontDistance">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'frontDistance' }"
- v-model="form.frontDistance"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车后距(m):" prop="rearDistance">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'rearDistance' }"
- v-model="form.rearDistance"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车左距(m):" prop="leftDistance">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'leftDistance' }"
- v-model="form.leftDistance"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车右距(m):" prop="rightDistance">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'rightDistance' }"
- v-model="form.rightDistance"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="车高(m):" prop="heightDistance">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'heightDistance' }"
- v-model="form.heightDistance"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="轴距(m):" prop="wheelbase">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'wheelbase' }"
- v-model="form.wheelbase"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="质量(kg):" prop="mass">
- <el-input
- placeholder="请输入"
- maxlength="12"
- v-autoTrim="{ obj: form, key: 'mass' }"
- v-model="form.mass"
- >
- </el-input>
- </el-form-item>
- </div>
- <div class="titlePanel">
- <div class="titlePanelBor">视图</div>
- </div>
- <div class="tipBox flexBox">
- <div class="tip">侧视图</div>
- <div class="tip">俯视图</div>
- </div>
- <div class="modelBox flexBox">
- <div class="uploadBox flexBox">
- <upload
- ref="uploadA"
- :multiple="false"
- type="vehicleImg"
- model="front"
- @attachmentChange="attachmentChange"
- ></upload>
- </div>
- <div class="uploadBox flexBox">
- <upload
- ref="uploadB"
- :multiple="false"
- type="vehicleImg"
- model="top"
- @attachmentChange="attachmentChange"
- ></upload>
- </div>
- </div>
- </el-form>
- <div class="btns">
- <el-button type="primary" @click="save">确定</el-button>
- <el-button type="primary" plain @click="cancel">取消</el-button>
- </div>
- </div>
- </template>
- <script>
- import upload from "./components/uploadVM";
- import { mapState } from "vuex";
- export default {
- name: "vehicleModelDetail", // 车辆设置详情
- components: { upload },
- data() {
- // 校验非负且最多4位小数
- let validateNum = (rule, value, callback) => {
- !/^(0|[1-9][0-9]*)(\.\d{1,4})?$/.test(value) &&
- callback(new Error(rule.message));
- callback();
- };
- // 校验不大于1
- let validateNoMore1 = (rule, value, callback) => {
- if (value > 1) {
- callback(new Error(rule.message));
- return;
- }
- callback();
- };
- return {
- form: {
- modelLabel: "", // 车辆模型标识
- vehicleType: "", // 车辆类型
- vehicleModel: "", // 车辆型号
- vehicleColour: "", // 车辆颜色
- sort: "", // 序号
- valid: "", // 是否有效
- maxSpeed: "", // 最大速度
- enginePower: "", // 发动机功率
- maxDeceleration: "", // 最大减速度
- maxSteeringAngle: "", // 最大转角
- wheelDrive: "", // 驱动方式
- overallEfficiency: "", // 总效率
- frontSurfaceEffective: "", // 前表面有效面积
- airDragCoefficient: "", // 空气阻力系数
- rollingResistanceCoefficient: "", // 滚动阻力系数
- wheelDiameter: "", // 车轮直径
- frontDistance: "", // 车前距
- rearDistance: "", // 车后距
- leftDistance: "", // 车左距
- rightDistance: "", // 车右距
- heightDistance: "", // 车高
- wheelbase: "", // 轴距
- mass: "", // 质量
- id: "",
- vehicleFrontView: "", // 对应的图片相对地址
- vehicleTopView: "", // 对应的图片相对地址
- },
- wheelDriveList: [],
- validList: [
- {
- code: "0",
- caption: "无效",
- },
- {
- code: "1",
- caption: "有效",
- },
- ],
- rules: {
- modelLabel: [
- { required: true, message: "请输入", trigger: "blur" },
- ],
- vehicleType: [
- { required: true, message: "请输入", trigger: "blur" },
- ],
- vehicleModel: [
- { required: true, message: "请输入", trigger: "blur" },
- ],
- vehicleColour: [
- { required: true, message: "请输入", trigger: "blur" },
- ],
- sort: [{ required: true, message: "请输入", trigger: "blur" }],
- valid: [
- { required: true, message: "请选择", trigger: "change" },
- ],
- maxSpeed: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- enginePower: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- maxDeceleration: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- maxSteeringAngle: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- overallEfficiency: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNoMore1,
- message: "请输入不大于1的非负数",
- trigger: ["blur"],
- },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- frontSurfaceEffective: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- airDragCoefficient: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNoMore1,
- message: "请输入不大于1的非负数",
- trigger: ["blur"],
- },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- rollingResistanceCoefficient: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNoMore1,
- message: "请输入不大于1的非负数",
- trigger: ["blur"],
- },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- wheelDiameter: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- frontDistance: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- rearDistance: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- leftDistance: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- rightDistance: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- heightDistance: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- wheelbase: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- mass: [
- { required: true, message: "请输入", trigger: "blur" },
- {
- validator: validateNum,
- message: "请输入最多带有4位小数的非负数",
- trigger: ["blur"],
- },
- ],
- wheelDrive: [
- { required: true, message: "请选择", trigger: "change" },
- ],
- },
- };
- },
- computed: {
- ...mapState(["fileHost", "fileUrl"]),
- },
- methods: {
- save() {
- this.$refs.form.validate((valid) => {
- if (valid) {
- if (
- !this.form.vehicleFrontView ||
- !this.form.vehicleTopView
- ) {
- this.$message.error("请先上传图片");
- return;
- }
- this.$axios({
- method: "post",
- url: this.$api.systemManagement.saveVehicleTemp,
- data: {
- ...this.form,
- },
- }).then((res) => {
- if (res.code == 200 && res.info) {
- this.$message.success("保存成功");
- this.cancel();
- } else {
- this.$message.error(res.message || "保存失败");
- }
- });
- }
- });
- },
- cancel() {
- this.$router.push({ path: "/vehicleModelManagement" });
- },
- attachmentChange(fileName, model) {
- if (model === "top") {
- this.form.vehicleTopView = fileName;
- } else {
- this.form.vehicleFrontView = fileName;
- }
- },
- getImgUrl(addr) {
- let url = "";
- if (process.env.VUE_APP_IS_DEV == "true") {
- url = this.fileHost + this.fileUrl;
- } else {
- url = this.fileUrl;
- }
- let token = localStorage.getItem("Authorization").split(" ")[1];
- let src = `${url}?objectName=${addr}&access_token=${token}`;
- return src;
- },
- },
- async mounted() {
- await this.$dicsListsInit({
- wheelDriveList: "driveType",
- });
- if (this.$route.query.id) {
- this.$axios({
- method: "post",
- url: this.$api.systemManagement.getVehicleTempInfo,
- data: { id: this.$route.query.id },
- }).then((res) => {
- if (res.code == 200 && res.info) {
- this.form = res.info;
- if (res.info.vehicleFrontView) {
- this.$refs.uploadA.imageUrl = this.getImgUrl(
- res.info.vehicleFrontView
- );
- }
- if (res.info.vehicleTopView) {
- this.$refs.uploadB.imageUrl = this.getImgUrl(
- res.info.vehicleTopView
- );
- }
- } else {
- this.$message.error(res.message || "获取信息失败");
- }
- });
- }
- },
- };
- </script>
- <style lang='less' scoped>
- .el-form {
- padding: 30px 10px;
- }
- .titlePanel {
- padding: 22px 0;
- }
- .tipBox {
- padding: 0 20px;
- .tip {
- text-align: center;
- width: 50%;
- padding-left: 10px;
- font-size: 12px;
- }
- }
- .modelBox {
- padding: 20px;
- .uploadBox {
- align-items: center;
- justify-content: center;
- width: 50%;
- }
- }
- .btns {
- padding-top: 30px;
- text-align: center;
- }
- </style>
|