index.vue 7.6 KB

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