appletView.vue 7.7 KB

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