|
@@ -1,14 +1,310 @@
|
|
|
<template>
|
|
|
- <view>
|
|
|
-
|
|
|
+ <view class="order-form info-wrap">
|
|
|
+ <!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 -->
|
|
|
+ <up-form
|
|
|
+ labelPosition="left"
|
|
|
+ :model="state.model"
|
|
|
+ :rules="state.rules"
|
|
|
+ ref="formRef"
|
|
|
+ labelWidth="120"
|
|
|
+ >
|
|
|
+ <up-form-item
|
|
|
+ label="工单名称"
|
|
|
+ prop="order.name"
|
|
|
+ borderBottom
|
|
|
+ :required="true"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="state.model.order.name"
|
|
|
+ border="none"
|
|
|
+ ></up-input>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item
|
|
|
+ label="工单类型"
|
|
|
+ prop="order.type"
|
|
|
+ borderBottom
|
|
|
+ :required="true"
|
|
|
+ @click="state.showOrderType = true; hideKeyboard()"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="state.model.order.type"
|
|
|
+ disabled
|
|
|
+ disabledColor="#ffffff"
|
|
|
+ placeholder="请选择工单类型"
|
|
|
+ :required="true"
|
|
|
+ border="none"
|
|
|
+ ></up-input>
|
|
|
+ <template #right>
|
|
|
+ <up-icon
|
|
|
+ name="arrow-right"
|
|
|
+ ></up-icon>
|
|
|
+ </template>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item
|
|
|
+ label="工单等级"
|
|
|
+ prop="order.level"
|
|
|
+ borderBottom
|
|
|
+ :required="true"
|
|
|
+ @click="state.showOrderLevel = true; hideKeyboard()"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="state.model.order.level"
|
|
|
+ disabled
|
|
|
+ disabledColor="#ffffff"
|
|
|
+ placeholder="请选择工单等级"
|
|
|
+ border="none"
|
|
|
+ ></up-input>
|
|
|
+ <template #right>
|
|
|
+ <up-icon
|
|
|
+ name="arrow-right"
|
|
|
+ ></up-icon>
|
|
|
+ </template>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item
|
|
|
+ label="预计开始日期"
|
|
|
+ prop="order.startDate"
|
|
|
+ borderBottom
|
|
|
+ :required="true"
|
|
|
+ @click="state.showStartClendar = true; hideKeyboard()"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="state.model.order.startDate"
|
|
|
+ disabled
|
|
|
+ disabledColor="#ffffff"
|
|
|
+ placeholder="请选择预计开始日期"
|
|
|
+ border="none"
|
|
|
+ ></up-input>
|
|
|
+ <template #right>
|
|
|
+ <up-icon
|
|
|
+ name="arrow-right"
|
|
|
+ ></up-icon>
|
|
|
+ </template>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item
|
|
|
+ label="预计结束日期"
|
|
|
+ prop="order.endDate"
|
|
|
+ borderBottom
|
|
|
+ :required="true"
|
|
|
+ @click="state.showEndClendar = true; hideKeyboard()"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="state.model.order.endDate"
|
|
|
+ disabled
|
|
|
+ disabledColor="#ffffff"
|
|
|
+ placeholder="请选择预计结束日期"
|
|
|
+ border="none"
|
|
|
+ ></up-input>
|
|
|
+ <template #right>
|
|
|
+ <up-icon
|
|
|
+ name="arrow-right"
|
|
|
+ ></up-icon>
|
|
|
+ </template>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item
|
|
|
+ label="故障描述"
|
|
|
+ borderBottom
|
|
|
+ >
|
|
|
+ <up-textarea
|
|
|
+ placeholder="故障描述"
|
|
|
+ v-model="state.model.order.desc"
|
|
|
+ ></up-textarea>
|
|
|
+ </up-form-item>
|
|
|
+ <up-form-item>
|
|
|
+ <text class="u-demo-block__title">问题图片</text>
|
|
|
+ <up-upload
|
|
|
+ :fileList="state.model.order.files"
|
|
|
+ @afterRead="afterRead"
|
|
|
+ @delete="deletePic"
|
|
|
+ name="imags"
|
|
|
+ multiple
|
|
|
+ :maxCount="5"
|
|
|
+ :previewFullImage="true"
|
|
|
+ ></up-upload>
|
|
|
+ </up-form-item>
|
|
|
+ <up-button @click="submit" style="margin-top: 20rpx;">提交</up-button>
|
|
|
+ </up-form>
|
|
|
+ <up-action-sheet
|
|
|
+ :show="state.showOrderType"
|
|
|
+ :actions="state.orderTypeList"
|
|
|
+ title="请选择工单类型"
|
|
|
+ @close="state.showOrderType = false"
|
|
|
+ @select="orderTypeSelect"
|
|
|
+ >
|
|
|
+ </up-action-sheet>
|
|
|
+ <up-action-sheet
|
|
|
+ :show="state.showOrderLevel"
|
|
|
+ :actions="state.orderLevelList"
|
|
|
+ title="请选择工单等级"
|
|
|
+ @close="state.showOrderLevel = false"
|
|
|
+ @select="orderLevelSelect"
|
|
|
+ >
|
|
|
+ </up-action-sheet>
|
|
|
+ <up-datetime-picker
|
|
|
+ :show="state.showStartClendar"
|
|
|
+ v-model="state.model.order.startDate"
|
|
|
+ mode="date"
|
|
|
+ ></up-datetime-picker>
|
|
|
+ <up-datetime-picker
|
|
|
+ :show="state.showEndClendar"
|
|
|
+ v-model="state.model.order.endDate"
|
|
|
+ mode="date"
|
|
|
+ ></up-datetime-picker>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
+import {reactive, ref} from 'vue'
|
|
|
+import {uploadOrderFile} from '@/api/workorder.js'
|
|
|
+import dayjs from 'dayjs';
|
|
|
+import {DateFormat} from "@/util/index.js";
|
|
|
+
|
|
|
+const state = reactive({
|
|
|
+ showOrderType: false,
|
|
|
+ showOrderLevel: false,
|
|
|
+ showStartClendar: false,
|
|
|
+ showEndClendar: false,
|
|
|
+ model: {
|
|
|
+ order: {
|
|
|
+ files: [],
|
|
|
+ startDate: [dayjs().format(DateFormat.YYYYMMDD)],
|
|
|
+ endDate: [dayjs().format(DateFormat.YYYYMMDD)],
|
|
|
+ }
|
|
|
+ },
|
|
|
+ orderTypeList: [
|
|
|
+ {name: '男'},
|
|
|
+ {name: '女'},
|
|
|
+ {name: '保密'},
|
|
|
+ ],
|
|
|
+ orderLevelList: [
|
|
|
+ {name: 'level'},
|
|
|
+ {name: 'level2'},
|
|
|
+ {name: 'level3'},
|
|
|
+ ],
|
|
|
+ rules: {
|
|
|
+ 'order.name': {
|
|
|
+ type: 'string',
|
|
|
+ required: true,
|
|
|
+ message: '请填工单名称',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ 'order.type': {
|
|
|
+ type: 'string',
|
|
|
+ max: 1,
|
|
|
+ required: true,
|
|
|
+ message: '请选择工单类型',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ 'order.level': {
|
|
|
+ type: 'string',
|
|
|
+ max: 1,
|
|
|
+ required: true,
|
|
|
+ message: '请选择工单等级',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ 'order.startDate': {
|
|
|
+ type: 'string',
|
|
|
+ required: true,
|
|
|
+ message: '请选择预计开始时间',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ 'order.endDate': {
|
|
|
+ type: 'string',
|
|
|
+ max: 1,
|
|
|
+ required: true,
|
|
|
+ message: '请选择预计结束时间',
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ }
|
|
|
+ },
|
|
|
+});
|
|
|
+// 使用 ref 创建响应式引用
|
|
|
+const formRef = ref(null);
|
|
|
+const hideKeyboard = () => {
|
|
|
+ uni.hideKeyboard()
|
|
|
+}
|
|
|
+const orderTypeSelect = (item) => {
|
|
|
+ state.model.order.type = item.name;
|
|
|
+ state.showOrderType = false;
|
|
|
+};
|
|
|
+const orderLevelSelect = (item) => {
|
|
|
+ state.model.order.level = item.name;
|
|
|
+ state.showOrderLevel = false;
|
|
|
+};
|
|
|
+
|
|
|
+// 删除图片
|
|
|
+const deletePic = (event) => {
|
|
|
+ state.model.order.files.splice(event.index, 1)
|
|
|
+}
|
|
|
+const afterRead = async (event) => {
|
|
|
+ // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
|
|
|
+ let lists = [].concat(event.file)
|
|
|
+ let fileListLen = state.model.order.files.length
|
|
|
+ lists.map((item) => {
|
|
|
+ state.model.order.files.push({
|
|
|
+ ...item,
|
|
|
+ status: 'uploading',
|
|
|
+ message: '上传中'
|
|
|
+ })
|
|
|
+ })
|
|
|
+ for (let i = 0; i < lists.length; i++) {
|
|
|
+ console.log(lists[i].url, 'lists[i].url')
|
|
|
+ const result = await uploadOrderFile(lists[i].url)
|
|
|
+ console.log(lists[i].url, 'lists[i].url11111')
|
|
|
+ let item = state.model.order.files[fileListLen]
|
|
|
+ state.model.order.files.splice(fileListLen, 1, Object.assign(item, {
|
|
|
+ status: 'success',
|
|
|
+ message: '',
|
|
|
+ url: result
|
|
|
+ }))
|
|
|
+ fileListLen++
|
|
|
+ }
|
|
|
+}
|
|
|
+const submit = () => {
|
|
|
+ formRef.value.validate().then(async valid => {
|
|
|
+ if (valid) {
|
|
|
+ const params = {
|
|
|
+ "grant_type": "password_login",
|
|
|
+ "username": state.model.userInfo.name,
|
|
|
+ "password": Base64.encode(model.userInfo.pwd),
|
|
|
+ "client_id": "speed",
|
|
|
+ "client_secret": "speed1211",
|
|
|
+ }
|
|
|
|
|
|
+ } else {
|
|
|
+ uni.$u.toast('校验失败')
|
|
|
+ }
|
|
|
+ }).catch((e) => {
|
|
|
+ debugger
|
|
|
+ // 处理验证错误
|
|
|
+ uni.$u.toast('校验失败')
|
|
|
+ });
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
|
|
|
-<style scoped lang="scss">
|
|
|
+<style lang="scss">
|
|
|
+.order-form {
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: $uni-text-gap;
|
|
|
+ padding: $uni-text-gap;
|
|
|
+
|
|
|
+ .u-form-item__body__left__content .u-form-item__body__left__content__required {
|
|
|
+ display: flex;
|
|
|
+ position: static;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-end;
|
|
|
+ margin-right: $uni-text-gap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .u-form-item__body .u-form-item__body__left {
|
|
|
+ align-items: flex-start;
|
|
|
+ }
|
|
|
+
|
|
|
+ .u-demo-block__title {
|
|
|
+ color: $uni-text-black;
|
|
|
+ }
|
|
|
|
|
|
+ input {
|
|
|
+ text-align: right !important;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|