index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <oa-scroll
  3. customClass="scroll-height"
  4. :customStyle="{}"
  5. :isSticky="false"
  6. :refresherLoad="false"
  7. :refresherEnabled="false"
  8. :refresherDefaultStyle="'none'"
  9. :refresherThreshold="44"
  10. :refresherBackground="'#f5f6f7'"
  11. :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
  12. >
  13. <view class="menu-list m0">
  14. <view class="list-cell">
  15. <view class="menu-item font14">
  16. <view style="margin-right: auto; color: #666666"></view>
  17. <view style="color: #149eff" @click="proxy.$tab.navigateTo(`/pages/business/fireIot/repairReport/record`)">报修历史</view>
  18. </view>
  19. <u--form :model="form" ref="uForm" :rules="rules" labelWidth="80">
  20. <view style="padding: 10px 0 10px 0; background: #ffffff">
  21. <view style="padding-left: 9px">
  22. <u-form-item label="项目名称" prop="projectName" required :borderBottom="true">
  23. <u-input v-model="form.projectName" placeholder="请填写项目名称" border="none">
  24. <template #suffix>
  25. <u-icon name="search" color="#999999" size="22" @click="projectSubmit(form.projectName)"></u-icon>
  26. </template>
  27. </u-input>
  28. </u-form-item>
  29. <u-form-item label="项目地址" prop="projectAddress" :borderBottom="true" required>
  30. <u-input v-model="form.projectAddress" placeholder="请填写项目地址" border="none" />
  31. </u-form-item>
  32. <u-form-item label="报修人" prop="reflectName" :borderBottom="true" required>
  33. <u-input v-model="form.reflectName" placeholder="请填写报修人" border="none" maxlength="10" />
  34. </u-form-item>
  35. <u-form-item label="手机号" prop="reflectPhone" :borderBottom="true" required>
  36. <u-input v-model="form.reflectPhone" placeholder="请填写手机号" border="none" maxlength="11" />
  37. </u-form-item>
  38. <u-form-item label="问题描述" prop="repairContent" :borderBottom="true" required>
  39. <u--textarea v-model="form.repairContent" border="none" placeholder="请填写问题描述" maxlength="100" style="padding: 0"></u--textarea>
  40. </u-form-item>
  41. <u-form-item label="上传图片" prop="repairPicture" :borderBottom="true">
  42. <oa-upload :uploadCount="1" :uploadImage="form.repairPicture" @uploadSuccessChange="uploadSuccessChange" @uploadDeleteChange="uploadDeleteChange"></oa-upload>
  43. <view style="color: #666666">图片支持png、jpg</view>
  44. </u-form-item>
  45. </view>
  46. </view>
  47. </u--form>
  48. </view>
  49. </view>
  50. <view class="app-button">
  51. <view class="app-button-padding"></view>
  52. <view class="app-button-fixed">
  53. <u-button class="app-buttom" type="primary" @click="handleSubmit('提交')" shape="circle"> 提交 </u-button>
  54. </view>
  55. </view>
  56. <u-picker
  57. :show="actionShow"
  58. :columns="actionsList"
  59. :title="'请选择' + actionTitle"
  60. keyName="name"
  61. visibleItemCount="6"
  62. :defaultIndex="[actionDefaultIndex]"
  63. :closeOnClickOverlay="true"
  64. @close="actionShow = false"
  65. @cancel="actionShow = false"
  66. @confirm="selectAction"
  67. ></u-picker>
  68. </oa-scroll>
  69. </template>
  70. <script setup>
  71. /*----------------------------------依赖引入-----------------------------------*/
  72. import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
  73. import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
  74. /*----------------------------------接口引入-----------------------------------*/
  75. import { add, getAddHistoryInfo } from "@/api/business/fireIot/repairReport.js";
  76. /*----------------------------------组件引入-----------------------------------*/
  77. /*----------------------------------store引入-----------------------------------*/
  78. import { useStores, commonStores } from "@/store/modules/index";
  79. /*----------------------------------公共方法引入-----------------------------------*/
  80. /*----------------------------------公共变量-----------------------------------*/
  81. const { proxy } = getCurrentInstance();
  82. const commonStore = commonStores();
  83. /*----------------------------------变量声明-----------------------------------*/
  84. const uForm = ref(null);
  85. const state = reactive({
  86. form: {
  87. projectName: "", //项目名称
  88. projectAddress: "", //项目地址
  89. reflectName: "", //报修人
  90. reflectPhone: "", //报修手机号码
  91. repairContent: "", //报修内容
  92. repairPicture: "", //报修图片
  93. },
  94. rules: {
  95. projectName: [{ required: true, message: "请填写项目名称", trigger: ["blur", "change"] }],
  96. projectName: [{ required: true, message: "请填写项目地址", trigger: ["blur", "change"] }],
  97. reflectName: [{ required: true, message: "请填写报修人", trigger: ["blur", "change"] }],
  98. reflectPhone: [
  99. { required: true, message: "请填写手机号", trigger: ["blur", "change"] },
  100. { type: "string", min: 11, required: true, message: "请填写正确11位手机号", pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, trigger: ["blur", "change"] },
  101. ],
  102. repairContent: [{ required: true, message: "请填写问题描述", trigger: ["blur", "change"] }],
  103. },
  104. actionShow: false,
  105. actionTitle: "",
  106. actionsList: [],
  107. actionDefaultIndex: 0,
  108. });
  109. const { form, rules, actionShow, actionTitle, actionsList, actionDefaultIndex } = toRefs(state);
  110. /**
  111. * @项目名称
  112. * @icon图标按钮点击事件
  113. */
  114. function projectSubmit(e) {
  115. actionsList.value = [[]];
  116. getAddHistoryInfo({
  117. projectName: e,
  118. }).then((res) => {
  119. if (res.status == "SUCCESS") {
  120. if (res.data.length > 0) {
  121. actionShow.value = true;
  122. res.data.forEach((el) => {
  123. el.name = el.projectName;
  124. actionsList.value[0].push(el);
  125. });
  126. actionTitle.value = "项目名称";
  127. } else {
  128. proxy.$modal.msg("未匹配到您所输入的项目!");
  129. }
  130. }
  131. });
  132. }
  133. /**
  134. * @提交
  135. */
  136. function handleSubmit(value) {
  137. uForm.value
  138. .validate()
  139. .then((res) => {
  140. uni.$u.toast("校验通过");
  141. proxy.$modal.loading("加载中");
  142. add(form.value).then((requset) => {
  143. if (requset.status === "SUCCESS") {
  144. proxy.$modal.closeLoading();
  145. proxy.$tab.navigateTo(`/pages/common/success/index?codeName=提交成功`);
  146. form.value = {
  147. projectName: "", //项目名称
  148. projectAddress: "", //项目地址
  149. reflectName: "", //报修人
  150. reflectPhone: "", //报修手机号码
  151. repairContent: "", //报修内容
  152. repairPicture: "", //报修图片
  153. };
  154. }
  155. });
  156. })
  157. .catch((errors) => {
  158. uni.$u.toast("校验失败");
  159. });
  160. }
  161. /**
  162. * @action弹出框选择事件
  163. */
  164. function selectAction(e) {
  165. if (actionTitle.value == "项目名称") {
  166. form.value.projectName = e.value[0].projectName; //项目名称
  167. form.value.projectAddress = e.value[0].projectAddress; //项目地址
  168. form.value.reflectName = e.value[0].reflectName; //报修人
  169. }
  170. actionShow.value = false;
  171. }
  172. /**
  173. * @图片上传成功回调
  174. */
  175. function uploadSuccessChange(e) {
  176. form.value.repairPicture = e.url;
  177. }
  178. /**
  179. * @图片删除回调
  180. */
  181. function uploadDeleteChange(e) {
  182. form.value.repairPicture = e;
  183. }
  184. onLoad((options) => {
  185. if ("statusBool" in options) {
  186. document.getElementsByClassName("uni-page-head-hd")[0].style.cssText = "display: none;";
  187. }
  188. });
  189. onReady(() => {});
  190. onShow(() => {
  191. //调用系统主题颜色
  192. proxy.$settingStore.systemThemeColor([1]);
  193. });
  194. </script>
  195. <style lang="scss" scoped></style>