Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

add-work-order.vue 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <template>
  2. <view class="bg">
  3. <view class="title_wrap"><text class="title">基本信息</text></view>
  4. <car-number-input @numberInputResult="carNumber" :defaultStr="state.form.vehiclePlate"></car-number-input>
  5. <u-form label-width="230" :model="state.form" ref="uForm" :label-style='labelStyle'>
  6. <u-form-item label="车牌颜色" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  7. borderBottom>
  8. <u-input v-model="state.form.vehiclePlateColorStr" type="select" @click="show1 = true" input-align='right'/>
  9. </u-form-item>
  10. <u-form-item label="姓名" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  11. borderBottom>
  12. <u-input placeholder='请输入姓名' type="idcard" v-model="state.form.customerName" maxlength="18"
  13. inputAlign="right" />
  14. </u-form-item>
  15. <u-form-item label="联系方式" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  16. borderBottom>
  17. <u-input placeholder='请输入手机号码' type="number" v-model="state.form.customerTel" maxlength="11"
  18. inputAlign="right" />
  19. </u-form-item>
  20. </u-form>
  21. </view>
  22. <view class="bg">
  23. <view class="title">工单信息</view>
  24. <u-form label-width="230" :model="state.form" ref="uForm" :label-style='labelStyle' borderBottom>
  25. <u-form-item label="工单类型" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  26. borderBottom>
  27. <u-input v-model="state.form.questionTypeStr" type="select" @click="show2 = true" input-align='right'/>
  28. </u-form-item>
  29. <u-form-item label="是否ETC用户" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  30. borderBottom>
  31. <u-input v-model="state.form.etcUserStr" type="select" @click="show3 = true" input-align='right'/>
  32. </u-form-item>
  33. <u-form-item label="事件发生日期" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  34. borderBottom>
  35. <picker mode="date" @change="bindDateChange">
  36. <view class="picker" v-if="!state.form.eventOccurrenceDate">
  37. 请选择日期
  38. </view>
  39. <view class="data">
  40. {{state.form.eventOccurrenceDate}}
  41. </view>
  42. </picker>
  43. </u-form-item>
  44. <u-form-item label="客户投诉" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  45. borderBottom>
  46. </u-form-item>
  47. <textarea v-model="state.form.appeal" style="border: 1rpx dashed rgb(192, 196, 204);min-height: 200rpx; width: 100%;border-radius: 18rpx;padding: 20rpx;box-sizing: border-box;" placeholder="请输入述求" auto-height adjust-position></textarea>
  48. <u-form-item label="其他佐证材料" :left-icon='`${$imgUrl}issuance/point-form.png`' :left-icon-style='leftIcon'
  49. borderBottom>
  50. <text class="common-word">(不限于图片、文件、不超过5个。)</text>
  51. </u-form-item>
  52. <button type="default" class="ui-btn-another" @click="addFile()">
  53. +添加附件
  54. </button>
  55. </u-form>
  56. </view>
  57. <view class="action">
  58. <button type="default" class="ui-btn" @click="savaHandle()">
  59. 提交
  60. </button>
  61. </view>
  62. <!-- 选择车牌颜色 -->
  63. <u-select v-model="show1" :list="state.colorRange" @confirm="changeColor"></u-select>
  64. <!-- 工单类型 -->
  65. <u-select v-model="show2" :list="state.questionTypeRange" @confirm="changeQuestionType"></u-select>
  66. <!-- -->
  67. <u-select v-model="show3" :list="state.etcUserRange" @confirm="changeEtcUser"></u-select>
  68. </template>
  69. <script setup lang="ts">
  70. import { navTo,msg,uploadFile} from "@/utils/utils";
  71. import { reactive,ref } from "vue";
  72. import carNumberInput from "@/components/car-number-input/car-number-input.vue";
  73. import { onLoad } from "@dcloudio/uni-app";
  74. import { getItem } from "@/utils/storage.ts"
  75. import {requestNew} from "@/utils/network/request.js";
  76. import {selfServiceUserAdd} from "@/utils/network/api.js";
  77. const labelStyle = {
  78. color: "#004576",
  79. fontSize: "28rpx",
  80. }
  81. const leftIcon = {
  82. height: '100%',
  83. width: '8rpx',
  84. display: 'flex',
  85. 'align-items': 'center',
  86. 'margin-right': '4rpx',
  87. }
  88. const show1 = ref(false)
  89. const show2 = ref(false)
  90. const show3 = ref(false)
  91. const state = reactive({
  92. form: {
  93. customerName: "",
  94. customerTel: "",
  95. vehiclePlate: "",
  96. vehiclePlateColor: "",
  97. vehiclePlateColorStr:"",//车牌颜色中文
  98. questionType:"",
  99. questionTypeStr:"",
  100. etcUser:"",
  101. etcUserStr:"",
  102. eventOccurrenceDate:"",//2016-09-01 00:00:00
  103. appeal:"",
  104. supportingMaterialsUrl:"",
  105. supportingMaterialsUrlShow:[]
  106. },
  107. colorRange: [],
  108. questionTypeRange:[
  109. {value: 1, label: "工单1"},
  110. {value: 2, label: "工单2"},
  111. ],
  112. etcUserRange:[
  113. {value: 1, label: "是"},
  114. {value: 0, label: "否"},
  115. ],
  116. })
  117. onLoad((option : any) => {
  118. let getColor = getItem('key')['VEHICLE_COLOR_TYPE'];
  119. for (var k = 0; k < getColor.length; k++) {
  120. let obj = {};
  121. obj['value'] = getColor[k]['code']
  122. obj['label'] = getColor[k]['name']
  123. state.colorRange.push(obj)
  124. }
  125. console.log("state.colorRange",state.colorRange)
  126. });
  127. //车牌号输入
  128. const carNumber = (val : any) => {
  129. state.form.vehiclePlate = val.trim();
  130. };
  131. const changeColor = (item) => {
  132. state.form.vehiclePlateColor = item[0].value
  133. state.form.vehiclePlateColorStr = item[0].label
  134. console.log(item)
  135. }
  136. const changeQuestionType = (item) => {
  137. state.form.questionType = item[0].value
  138. state.form.questionTypeStr = item[0].label
  139. console.log(item)
  140. }
  141. const changeEtcUser = (item) => {
  142. state.form.etcUser = item[0].value
  143. state.form.etcUserStr = item[0].label
  144. console.log(item)
  145. }
  146. const bindDateChange=(e)=>{
  147. console.log('picker发送选择改变,携带值为', e.detail.value)
  148. state.form.eventOccurrenceDate= e.detail.value+" 00:00:00"
  149. }
  150. const savaHandle = () => {
  151. if(!state.form.vehiclePlate){
  152. msg('请输入车牌号');
  153. return;
  154. }
  155. if(!state.form.vehiclePlateColor){
  156. msg('请选择车牌颜色');
  157. return;
  158. }
  159. if(!state.form.customerName){
  160. msg('请输入姓名');
  161. return;
  162. }
  163. if(!state.form.customerTel){
  164. msg('请输入手机号码');
  165. return;
  166. }
  167. if(!state.form.questionType){
  168. msg('请选择工单类型');
  169. return;
  170. }
  171. if(!state.form.etcUser){
  172. msg('请选择是否ETC用户');
  173. return;
  174. }
  175. if(!state.form.eventOccurrenceDate){
  176. msg('请选择事件发生日期');
  177. return;
  178. }
  179. if(!state.form.appeal){
  180. msg('请输入述求');
  181. return;
  182. }
  183. if(!state.form.supportingMaterialsUrl){
  184. msg('请上传其他佐证材料');
  185. return;
  186. }
  187. state.form.supportingMaterialsUrl=state.form.supportingMaterialsUrlShow.toString()
  188. const options = {
  189. type: 2,
  190. data: {
  191. ...state.form
  192. },
  193. method: "POST",
  194. showLoading: true,
  195. };
  196. requestNew(selfServiceUserAdd, options).then((res) => {
  197. console.log("添加成功",res)
  198. });
  199. }
  200. const addFile=()=>{
  201. uni.chooseMessageFile({
  202. count: 5,
  203. type: 'all',
  204. success (res) {
  205. // tempFilePath可以作为img标签的src属性显示图片
  206. console.log("res",res)
  207. var files=res.tempFiles
  208. for(var i=0;i<files.length;i++){
  209. uploadFile(files[i]['path'], "", "").then((data) => {
  210. state.form.supportingMaterialsUrlShow.push(data);
  211. console.log("state.form.supportingMaterialsUrlShow",state.form.supportingMaterialsUrlShow)
  212. })
  213. }
  214. }
  215. })
  216. }
  217. </script>
  218. <style lang="scss" scoped>
  219. .bg {
  220. background-color: white;
  221. width: 88%;
  222. margin: 0 auto;
  223. margin-top: 20rpx;
  224. border-radius: 12px;
  225. border: 1px solid #FFFFFF;
  226. padding: 20rpx;
  227. overflow: hidden;
  228. .title_wrap {
  229. display: flex;
  230. font-weight: 400;
  231. margin-bottom: 40rpx;
  232. .title {
  233. font-size: 30rpx;
  234. color: #01243A;
  235. }
  236. }
  237. .des {
  238. font-weight: 400;
  239. font-size: 28rpx;
  240. color: #01243A;
  241. line-height: 56rpx;
  242. margin-top: 10rpx;
  243. text-indent: 1rem;
  244. }
  245. }
  246. .action {
  247. position: absolute;
  248. left: 0;
  249. height: 188rpx;
  250. background-color: #fff;
  251. border-radius: 30rpx 30rpx 0 0;
  252. width: 100vw;
  253. display: flex;
  254. align-items: center;
  255. justify-content: center;
  256. flex-direction: column;
  257. margin-top: 20rpx;
  258. }
  259. .picker{
  260. text-align: right;
  261. color: rgb(192, 196, 204);
  262. }
  263. .data{
  264. text-align: right;
  265. }
  266. .five{
  267. color: rgb(195,188,157);
  268. }
  269. </style>