appletView.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. <template>
  2. <div class="page-box">
  3. <moduleView :propConfig="config" ref="view" v-loading="load" @pagination="pagination" @onRefresh="getList" @resert="queryList" @search="queryList" @clickHandle="clickHandle" @modalHandle="modalHandle" @detail="detail" />
  4. </div>
  5. </template>
  6. <script setup>
  7. import { computed,getCurrentInstance,ref, shallowRef } from "vue";
  8. const { proxy } = getCurrentInstance();
  9. import {appList,addApp,updateApp,deleApp} from '@/api/base/shopManage'
  10. import txt from "./txt.vue";
  11. import merchant from "./merchant.vue";
  12. const config = ref({
  13. attr:{
  14. calculateH:true
  15. },
  16. search:{
  17. attr:{
  18. size:'mini'
  19. },
  20. columns:[
  21. [{
  22. span:8,
  23. // label:'设备名称',
  24. labelWidth:16,
  25. prop:'searchText',
  26. component:'by-input',
  27. compConfig:{
  28. attr:{
  29. placeholder:'请输入小程序名称',
  30. prefixIcon:'vxe-icon-search'
  31. }
  32. }
  33. }]
  34. ]
  35. },
  36. tool:{
  37. tools:{
  38. export:true,
  39. add:true,
  40. search:true,
  41. refresh:true
  42. }
  43. },
  44. table:{
  45. attr:{
  46. size:'mini',
  47. seq:true,
  48. align:'center',
  49. // checkbox:true
  50. },
  51. columns:[{
  52. title:'应用ID',
  53. field:'appkey',
  54. },
  55. {
  56. isDetail:true,
  57. title:'小程序名称',
  58. field:'appName',
  59. },
  60. {
  61. title:'所属商户',
  62. field:'commercialName'
  63. },
  64. {
  65. title:'创建时间',
  66. field:'createTime'
  67. }]
  68. },
  69. modal:{
  70. tool:{
  71. tools:{
  72. return:true,
  73. add:true
  74. }
  75. },
  76. form:{
  77. attr:{
  78. width:'1000px',
  79. size:'small',
  80. labelWidth:'130px',
  81. rules:{
  82. appLogo:[
  83. {required: true, message: '请上传小程序logo', trigger: 'change'}
  84. ],
  85. appName:[
  86. {required: true, message: '请输入小程序名称', trigger: 'blur'}
  87. ],
  88. appIntroduce:[
  89. {required: true, message: '请输入小程序描述', trigger: 'blur'},
  90. ],
  91. commercialName:[
  92. {required: true, message: '请选择商户', trigger: 'change'}
  93. ],
  94. callBack:[
  95. {required: true, message: '请输入回调地址', trigger: 'blur'}
  96. ]
  97. }
  98. },
  99. columns:[
  100. [{
  101. label:'小程序logo',
  102. prop:'appLogo',
  103. component:'ByUpload'
  104. }],
  105. [{
  106. label:'小程序名称',
  107. prop:'appName',
  108. component:'by-input'
  109. }],
  110. [{
  111. label:'小程序描述',
  112. prop:'appIntroduce',
  113. component:'by-input',
  114. compConfig:{
  115. attr:{
  116. type:'textarea'
  117. }
  118. }
  119. }],
  120. [{
  121. label:'商户',
  122. prop:'commercialName',
  123. component:'by-select',
  124. compConfig:{
  125. attr:{
  126. label:'commercialName',
  127. value:'commercialId',
  128. retConfig:{
  129. commercialName:'commercialName',
  130. commercialId:'commercialId'
  131. },
  132. // disabledHandle: item => {
  133. // return item.state == 1 ? false : true
  134. // }
  135. },
  136. request:{
  137. url:'/app/getCommercialList',
  138. method:'get'
  139. }
  140. }
  141. }],
  142. [{
  143. label:'回调地址',
  144. prop:'callBack',
  145. component:'by-input',
  146. compConfig:{
  147. attr:{
  148. type:'textarea'
  149. }
  150. }
  151. }],
  152. [{
  153. label:'应用ID',
  154. prop:'appkey',
  155. component:shallowRef(txt)
  156. }],
  157. [{
  158. label:'应用秘钥',
  159. prop:'appSecret',
  160. component:shallowRef(txt)
  161. }],
  162. [{
  163. label:'备注',
  164. prop:'annotation',
  165. component:'by-input',
  166. compConfig:{
  167. attr:{
  168. type:'textarea'
  169. }
  170. }
  171. }]
  172. ]
  173. }
  174. }
  175. })
  176. const load = ref(false)
  177. const isSearch = ref(false)
  178. const timeNum = ref(0);
  179. const detail = () => {
  180. config.value.modal.tool.tools.save = true;
  181. delete config.value.modal.tool.tools.add;
  182. proxy.$refs.view.initFormTool();
  183. }
  184. const clickHandle = n => {
  185. if(n == 'onAdd'){
  186. config.value.modal.tool.tools.add = true;
  187. delete config.value.modal.tool.tools.save;
  188. proxy.$refs.view.initFormTool();
  189. }
  190. if(n == 'onDelete'){
  191. delHandle()
  192. }
  193. }
  194. const modalHandle = n =>{
  195. if(n == 'onAdd'){
  196. proxy.$refs.view.getFormValidate(addData)
  197. }
  198. if(n == 'onSave'){
  199. proxy.$refs.view.getFormValidate(onSave)
  200. }
  201. }
  202. const delHandle = () => {
  203. let data = proxy.$refs.view.getSelectData();
  204. let ids = []
  205. if(!data && data.lenght == 0) {
  206. proxy.$message('请选择数据')
  207. return
  208. }
  209. for(const item of data) {
  210. ids.push(item.equipmentId)
  211. }
  212. proxy.$confirm('此操作将永久删除数据, 是否继续?', '提示', {
  213. confirmButtonText: '确定',
  214. cancelButtonText: '取消',
  215. type: 'warning'
  216. }).then(() => {
  217. load.value = true;
  218. deleApp({
  219. appKeys:appkey,
  220. }).then(()=>{
  221. proxy.$message({message:'删除成功!',type:'success'})
  222. load.value = false;
  223. getList();
  224. }).catch(()=>{
  225. load.value = false;
  226. })
  227. }).catch(()=>{})
  228. }
  229. //添加
  230. const addData = () => {
  231. let value = proxy.$refs.view.getFormValue();
  232. if(value){
  233. load.value = true;
  234. addApp(value).then(res =>{
  235. load.value = false;
  236. proxy.$message({
  237. message:res.msg,
  238. type:'success'
  239. });
  240. proxy.$refs.view.closeModal();
  241. getList();
  242. }).catch(()=>{
  243. load.value = false;
  244. })
  245. }
  246. }
  247. //保存
  248. const onSave = () => {
  249. let data = proxy.$refs.view.getFormValue();
  250. load.value = true;
  251. updateApp(data).then(res => {
  252. proxy.$message({
  253. message:res.msg,
  254. type:'success'
  255. });
  256. load.value = false;
  257. proxy.$refs.view.closeModal();
  258. pagination();
  259. }).catch(() => {
  260. load.value = false;
  261. })
  262. }
  263. const pagination = () => {
  264. if(isSearch.value){
  265. queryList();
  266. }else{
  267. getList()
  268. }
  269. }
  270. //列表请求(包含分页和搜素条件)
  271. const queryList = () => {
  272. isSearch.value = true;
  273. let data = proxy.$refs.view.getQuery();
  274. requestList(data);
  275. }
  276. const getList = () => {
  277. if(!proxy.$refs.view){
  278. if(timeNum.value > 5){
  279. return
  280. }
  281. setTimeout(()=>{
  282. getList()
  283. },500)
  284. timeNum.value ++;
  285. return
  286. }
  287. timeNum.value = 0;
  288. isSearch.value = false;
  289. let data = proxy.$refs.view.getPage();
  290. requestList(data);
  291. }
  292. const requestList = data => {
  293. load.value = true;
  294. data.pageNum = data.pageNo;
  295. delete data.pageNo;
  296. appList(data).then(res => {
  297. load.value = false;
  298. proxy.$refs.view.setTableValue(res.data.records);
  299. let page = {
  300. pageNo: res.data.current, //当前页
  301. pageSize: data.pageSize, //每页条数
  302. total: res.data.total //总条数
  303. };
  304. proxy.$refs.view.setPage(page)
  305. }).catch(()=>{
  306. load.value = false;
  307. })
  308. }
  309. nextTick(()=>{
  310. getList()
  311. })
  312. const calculateTable = () => {
  313. nextTick(() => {
  314. proxy.$refs.view.initTable()
  315. })
  316. }
  317. defineExpose({
  318. calculateTable
  319. })
  320. </script>