ServicesupportApplyForm.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. const { createApp, ref ,onMounted,createVNode, render,computed,watch} = Vue
  2. createApp({
  3. setup() {
  4. watch(() => tool.loading,(to, from) => {
  5. })
  6. onMounted(()=>{
  7. serviceOption()
  8. operationRole()
  9. })
  10. const formData = ref({
  11. sa_serviceorderid:0,
  12. sa_orderid:0,
  13. siteid:"HY",
  14. servicetype:"",
  15. sys_enterpriseid:0,
  16. sonum:'',
  17. enterprisename:"",
  18. class1:"",
  19. class2:"",
  20. province:"",
  21. city:"",
  22. county:"",
  23. address:"",
  24. scenecontact:"",
  25. phonenumber:"",
  26. scenecontactphonenumber:'',
  27. reason:'',
  28. scenecontactrole:'',
  29. begdate:'',
  30. enddate:'',
  31. remarks:'',
  32. })
  33. const restForm = ()=>{
  34. formData.value = {
  35. sa_serviceorderid:0,
  36. sa_orderid:0,
  37. siteid:"HY",
  38. servicetype:"",
  39. sys_enterpriseid:0,
  40. enterprisename:"",
  41. class1:"",
  42. class2:"",
  43. province:"",
  44. city:"",
  45. county:"",
  46. address:"",
  47. name:"",
  48. phonenumber:"",
  49. scenecontactphonenumber:'',
  50. reason:'',
  51. scenecontactrole:'',
  52. begdate:'',
  53. enddate:'',
  54. remarks:'',
  55. }
  56. }
  57. // 判断是否登陆,根据登陆角色类型跳转不同页面
  58. const isLogin = (type)=>{
  59. if (!sessionStorage.getItem('loginInfo')){
  60. $('#myModal').modal('show')
  61. } else {
  62. let user = sessionStorage.getItem('loginInfo')
  63. user = JSON.parse(user)
  64. if (type == 'apply') {
  65. $('#myModal').modal('hide')
  66. linkOf('./ServiceOfficial.html')
  67. } else {
  68. let link = {
  69. Official:'./ServiceOfficialApply.html',
  70. tourist:'./ServiceOfficialReservation.html'
  71. }
  72. linkOf(link[user.type])
  73. }
  74. }
  75. }
  76. // 跳转
  77. const linkOf = (url)=> {
  78. window.location.href = url
  79. }
  80. // 登陆账号验证码数据
  81. const form = ref({
  82. phoneNumber:'',
  83. verifyCode:''
  84. })
  85. const isSend = computed(()=>{
  86. return time.value === 0 ? false : true
  87. })
  88. // 服务类型数据
  89. const serviceOptionData = ref({})
  90. const serviceOption = async ()=>{
  91. const res = await instance.post('',{
  92. "id":20240902102603,
  93. "content": {
  94. "siteid":"HY",
  95. "customerphone":JSON.parse(sessionStorage.getItem('loginInfo')).customerphone,
  96. }
  97. })
  98. serviceOptionData.value = res.data.data
  99. }
  100. // 选择服务类型
  101. const onChangeService = (item,key)=>{
  102. formData.value[key] = item
  103. if (item == '售前' || item == '历史售后') {
  104. formData.value.sa_orderid = formData.value.sonum = ''
  105. }
  106. }
  107. // 客诉大类数据
  108. const serviceKSOptionData = ["内漏", "外漏", "性能失效", "配件损坏或遗失", "外观问题", "异响或抖动", "打不开/不通水", "扭矩大", "其他"]
  109. // 应用系统数据
  110. const serviceSysOptionData = ["暖通系统", "消防系统", "其他"]
  111. // 查询企业信息
  112. const EnterpriseParam = ref({
  113. "id":20220920083901,
  114. "content": {
  115. "siteid":"HY",
  116. "pageNumber":1,
  117. "pageSize":20,
  118. "where":{
  119. "condition":'',
  120. "type":9,
  121. }
  122. }
  123. })
  124. const EnterprisePageTotal = ref(0)
  125. const EnterpriseList = ref([])
  126. const getEnterpriseData = async ()=>{
  127. if (!JSON.parse(sessionStorage.getItem('loginInfo'))) return false
  128. const res = await instance.post('',EnterpriseParam.value)
  129. EnterpriseList.value = res.data.data
  130. EnterprisePageTotal.value = res.data.pageTotal
  131. }
  132. // 附件上传
  133. const previewList = ref([])
  134. const fileChange = ()=>{
  135. tool.fileChange((rs)=>{
  136. // 监听loading变化
  137. function createObservable(obj) {
  138. return new Proxy(obj, {
  139. get(target, property) {
  140. return target[property];
  141. },
  142. set(target, property, value) {
  143. previewList.value = previewList.value.filter(e=>{if(e.file.name == rs.file.name){e.loading = rs.loading} return e})
  144. target[property] = value;
  145. return true;
  146. }
  147. });
  148. }
  149. rs.createObservable = createObservable
  150. // tool.getUploadUrl(rs)
  151. previewList.value.push(rs)
  152. })
  153. }
  154. // 下一步
  155. const step = ref(0)
  156. const steps = ref(['填写信息','添加订单商品','提交申请'])
  157. const nextStep = async ()=>{
  158. const rs = await tool.validateFormData(formData.value)
  159. if (!rs) return false
  160. if (step.value == steps.value.length - 1) return false
  161. step.value ++
  162. if (step.value == 1) {
  163. getorderProdData()
  164. }
  165. }
  166. const preStep = ()=>{
  167. step.value = step.value - 1
  168. }
  169. const orderProdData = ref({
  170. data:[]
  171. })
  172. const odParam = ref({
  173. id:20230206161703,
  174. content:{
  175. pageNumber:1,
  176. pageSize:100,
  177. sa_orderid: '',
  178. where:{
  179. condition:''
  180. }
  181. }
  182. })
  183. const getorderProdData = async ()=>{
  184. odParam.value.content.sa_orderid = formData.value.sa_orderid
  185. const res = await instance.post('',odParam.value)
  186. res.data.data = res.data.data.map(e=>{
  187. e.ischeck = false
  188. return e
  189. })
  190. orderProdData.value = res.data
  191. }
  192. // 提交单据
  193. const result = ref({})
  194. const submitData = async ()=>{
  195. if (!sessionStorage.getItem('loginInfo')){
  196. $('#myModal').modal('show')
  197. } else {
  198. const rs = await tool.validateFormData(formData.value)
  199. if (!rs) return false
  200. step.value = step.value + 1
  201. formData.value.phonenumber = JSON.parse(sessionStorage.getItem('loginInfo')).customerphone
  202. const res = await instance.post('',{
  203. "id":20230206091403,
  204. "content": formData.value
  205. })
  206. result.value.code = res.data.code
  207. if (res.data.code == 1) {
  208. addProdToBill(res.data.data.sa_serviceorderid)
  209. beginUpload(res.data.data.sa_serviceorderid)
  210. serviceBillDetail(res.data.data.sa_serviceorderid)
  211. } else {
  212. result.value.errmsg = res.data.msg
  213. }
  214. }
  215. }
  216. // 提交单据后插入选择商品
  217. const addProdToBill = async (dataid)=>{
  218. const res = await instance.post('',{
  219. "id":20230206161803,
  220. "content": {
  221. iteminfos:orderProdData.value.data.filter(e=>{if (e.ischeck == true){return e}}).map(e=>{return {
  222. itemid:e.itemid,
  223. qty:1,
  224. reason:'',
  225. sa_serviceorderitemsid:0
  226. }}),
  227. sa_serviceorderid:dataid
  228. }
  229. })
  230. }
  231. // 数据提交后开始附件上传
  232. const beginUpload = (id)=>{
  233. previewList.value.forEach(e=>{
  234. e.loading = true
  235. e.dataid = id
  236. tool.getUploadUrl(e,'sa_serviceorder')
  237. })
  238. listenFileComplete()
  239. }
  240. const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
  241. // 删除附件
  242. const deleteFile = (index)=>{
  243. previewList.value.splice(index,1)
  244. document.getElementById('fileInput').value = '';
  245. }
  246. // 分页切换
  247. const pageChange = (page)=>{
  248. if (page < 1) return false
  249. if (page > EnterprisePageTotal.value) return false
  250. EnterpriseParam.value.content.pageNumber = page
  251. getEnterpriseData()
  252. }
  253. const entTableVisiable = ref(false)
  254. // 选择表格数据
  255. const tableDataSelect = (soure,data)=>{
  256. switch (soure) {
  257. case 'enterprise':
  258. formData.value = Object.assign({},formData.value,data)
  259. $('#input_province').val(data.province).trigger('change');
  260. $('#input_city').val(data.city).trigger('change');
  261. entTableVisiable.value = false
  262. formData.value.sa_orderid = ''
  263. break;
  264. case 'order':
  265. formData.value.sa_orderid = data.sa_orderid
  266. formData.value.sonum = data.sonum
  267. orderTableVisiable.value = false
  268. break;
  269. default:
  270. break;
  271. }
  272. }
  273. // 切换日期
  274. const dateChange = (dom)=>{
  275. if (dom == '#begdate') {
  276. formData.value.begdate = $(dom).val()
  277. } else {
  278. formData.value.enddate = $(dom).val()
  279. }
  280. }
  281. //关联订单查询
  282. const orderTableVisiable = ref(false)
  283. const orderData = ref({
  284. })
  285. const orderParam = ref({
  286. id:20230206091503,
  287. content:{
  288. pageNumber: 1,
  289. pageSize: 20,
  290. sys_enterpriseid: 0,
  291. where:{
  292. condition:''
  293. }
  294. }
  295. })
  296. const getOrderData = async ()=>{
  297. orderParam.value.content.sys_enterpriseid = formData.value.sys_enterpriseid
  298. const res = await instance.post('',orderParam.value)
  299. orderData.value = res.data
  300. }
  301. // 订单分页切换
  302. const pageOrderChange = (page)=>{
  303. if (page < 1) return false
  304. if (page > orderData.value.pageTotal) return false
  305. orderParam.value.content.pageNumber = page
  306. getOrderData()
  307. }
  308. // 判断操作账号角色
  309. const hasEntSelectOp = ref(false)
  310. const operationRole = async ()=>{
  311. let roles = [0,1]
  312. let user = JSON.parse(sessionStorage.getItem('loginInfo')).resultobject.account_list[0]
  313. if (!roles.includes(user.usertype)) {
  314. const res = await instance.post('',{
  315. "classname": "common.usercenter.usercenter",
  316. "method": "queryUserMsg",
  317. "content": {}
  318. })
  319. formData.value.enterprisename = res.data.data.enterprise.enterprisename
  320. formData.value.sys_enterpriseid = res.data.data.enterprise.sys_enterpriseid
  321. hasEntSelectOp.value = false
  322. } else {
  323. hasEntSelectOp.value = true
  324. }
  325. }
  326. const isComplete = ref(false)
  327. // 监听附件上传是否已经完成
  328. listenFileComplete = ()=>{
  329. const timer = setInterval(() => {
  330. let arr = previewList.value.filter(e=>{
  331. if (e.loading == true) {
  332. return e
  333. }
  334. })
  335. if (arr.length > 0) {
  336. isComplete.value = false
  337. } else {
  338. isComplete.value = true
  339. clearInterval(timer)
  340. }
  341. }, 1000);
  342. }
  343. // 查询服务单详情
  344. const detailData = ref({})
  345. const serviceBillDetail = async (dataid)=>{
  346. const res = await instance.post('',{
  347. id:20230206091603,
  348. content:{
  349. sa_serviceorderid:dataid
  350. }
  351. })
  352. detailData.value = res.data.data
  353. tool.linkOf('./ServiceOfficialApplyList.html')
  354. }
  355. return {
  356. isLogin,
  357. linkOf,
  358. onChangeService,
  359. getEnterpriseData,
  360. EnterpriseList,
  361. formData,
  362. serviceOptionData,
  363. serviceKSOptionData,
  364. serviceSysOptionData,
  365. fileChange,
  366. previewList,
  367. submitData,
  368. imageExtensions,
  369. deleteFile,
  370. pageChange,
  371. EnterpriseParam,
  372. EnterprisePageTotal,
  373. entTableVisiable,
  374. hasEntSelectOp,
  375. dateChange,
  376. tableDataSelect,
  377. orderParam,
  378. orderData,
  379. getOrderData,
  380. pageOrderChange,
  381. orderTableVisiable,
  382. step,
  383. nextStep,
  384. preStep,
  385. steps,
  386. restForm,
  387. orderProdData,
  388. addProdToBill,
  389. isComplete,
  390. beginUpload,
  391. detailData,
  392. result,
  393. odParam,
  394. getorderProdData
  395. }
  396. }
  397. }).mount('#app')