index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="类型名称" >
  5. <el-input
  6. v-model="queryParams.name"
  7. placeholder="请输入类型名称"
  8. clearable
  9. size="small"
  10. style="width: 140px"
  11. @keyup.enter.native="handleQuery"
  12. />
  13. </el-form-item>
  14. <el-form-item label="生效状态" >
  15. <el-select v-model="queryParams.status" placeholder="请选择生效状态" size="small" style="width: 160px">
  16. <el-option :label="index.label" :value="index.value" v-for = "(index, item) in statusList" :key="item" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="商品类型" >
  20. <el-select v-model="queryParams.type" placeholder="请选择商品类型" size="small" style="width: 160px">
  21. <el-option :label="index.label" :value="index.value" v-for = "(index, item) in typeList" :key="item" />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="重复周期" >
  25. <el-select v-model="queryParams.cycle" placeholder="请选择重复周期" size="small" style="width: 160px">
  26. <el-option :label="index.label" :value="index.value" v-for = "(index, item) in cycleList" :key="item" />
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="执行时段" >
  30. <el-select v-model="queryParams.startTime" placeholder="请选择开始时间" size="small" style="width: 160px">
  31. <el-option :label="index.value" :value="index.value" v-for = "(index, item) in implementTimeStart" :key="item" />
  32. </el-select>
  33. --
  34. <el-select v-model="queryParams.endTime" placeholder="请选择截止时间" size="small" style="width: 160px">
  35. <el-option :label="index.value" :value="index.value" v-for = "(index, item) in implementTimeEnd" :key="item" />
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  40. <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  41. <el-button
  42. type="warning"
  43. plain
  44. icon="el-icon-download"
  45. size="mini"
  46. :loading="exportLoading"
  47. @click="handleExport"
  48. v-hasPermi="['system:admin:export']"
  49. >导出</el-button>
  50. <el-button
  51. type="primary"
  52. plain
  53. icon="el-icon-plus"
  54. size="mini"
  55. @click="handleAdd"
  56. v-hasPermi="['system:admin:add']"
  57. >新增</el-button>
  58. </el-form-item>
  59. </el-form>
  60. <el-table v-loading="loading" :data="adminList" >
  61. <el-table-column label="序号" align="center" prop="" show-overflow-tooltip >
  62. <template slot-scope="scope">
  63. {{scope.$index + 1}}
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="商品名称" align="center" prop="a" show-overflow-tooltip/>
  67. <el-table-column label="商品类型" align="center" prop="a" show-overflow-tooltip/>
  68. <el-table-column label="生效状态" align="center" prop="b" show-overflow-tooltip />
  69. <el-table-column label="重复周期" align="center" prop="b" show-overflow-tooltip />
  70. <el-table-column label="开始时间" align="center" prop="b" show-overflow-tooltip />
  71. <el-table-column label="截止时间" align="center" prop="b" show-overflow-tooltip />
  72. <el-table-column label="单价(元、每次)" align="center" prop="b" show-overflow-tooltip />
  73. <el-table-column label="创建时间" align="center" prop="d" show-overflow-tooltip />
  74. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  75. <template slot-scope="scope">
  76. <el-button
  77. size="mini"
  78. type="text"
  79. icon="el-icon-edit"
  80. @click="handleUpdate(scope.row)"
  81. v-hasPermi="['system:admin:edit']"
  82. >修改</el-button>
  83. <el-button
  84. size="mini"
  85. type="text"
  86. icon="el-icon-delete"
  87. @click="handleDelete(scope.row)"
  88. v-hasPermi="['system:admin:remove']"
  89. >删除</el-button>
  90. </template>
  91. </el-table-column>
  92. </el-table>
  93. <pagination
  94. v-show="total>0"
  95. :total="total"
  96. :page.sync="queryParams.current"
  97. :limit.sync="queryParams.size"
  98. @pagination="getList"
  99. />
  100. <!-- 添加或修改参数配置对话框 -->
  101. <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false" >
  102. <el-form ref="form" :model="form" :rules="rules" label-width="120px" >
  103. <el-row :gutter="0">
  104. <el-col :span="16">
  105. <el-form-item label="商品名称" prop="name" >
  106. <el-input v-model="form.name" placeholder="请输入商品名称" maxlength="15" show-word-limit />
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="12">
  110. <el-form-item label="生效状态" prop="status" >
  111. <el-select v-model="form.status" placeholder="请选择生效状态" size="small" style="width: 140px">
  112. <el-option :label="index.label" :value="index.value" v-for = "(index, item) in statusList" :key="item" />
  113. </el-select>
  114. </el-form-item>
  115. </el-col>
  116. <el-col :span="12">
  117. <el-form-item label="商品类型" prop="type" >
  118. <el-select v-model="form.type" placeholder="请选择商品类型" size="small" style="width: 140px">
  119. <el-option :label="index.label" :value="index.value" v-for = "(index, item) in typeList" :key="item" />
  120. </el-select>
  121. </el-form-item>
  122. </el-col>
  123. <el-col :span="24">
  124. <el-form-item label="重复周期" prop="checkList" >
  125. <el-checkbox-group v-model="checkList" @change="handleCheckedDatesChange">
  126. <el-checkbox v-for="date in cycleList" :label="date.value" :key="date.value">{{date.label}}</el-checkbox>
  127. </el-checkbox-group>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="24">
  131. <el-form-item label="执行时段" >
  132. <el-select v-model="form.startTime" placeholder="请选择开始时间" size="small" style="width: 140px;display:inline-block">
  133. <el-option :label="index.value" :value="index.value" v-for = "(index, item) in implementTimeStart" :key="item" />
  134. </el-select>
  135. --
  136. <el-select v-model="form.endTime" placeholder="请选择截止时间" size="small" style="width: 140px;display:inline-block">
  137. <el-option :label="index.value" :value="index.value" v-for = "(index, item) in implementTimeEnd" :key="item" />
  138. </el-select>
  139. </el-form-item>
  140. </el-col>
  141. </el-row>
  142. </el-form>
  143. <div slot="footer" class="dialog-footer">
  144. <el-button type="primary" @click="submitForm" v-if="!loading">确 定</el-button>
  145. <el-button :loading="loading" type="primary" @click="submitForm" v-else>提交中...</el-button>
  146. <el-button @click="cancel">取 消</el-button>
  147. </div>
  148. </el-dialog>
  149. </div>
  150. </template>
  151. <script>
  152. import { addManage, updataManage, delManage, getManage, exportManage } from "@/api/recharge/consumePlaces";
  153. import { getTimeFormat, YearMonthDate } from "@/assets/js/dataFormate.js";
  154. export default {
  155. name: "admin",
  156. data() {
  157. return {
  158. // 遮罩层
  159. loading: true,
  160. // 导出遮罩层
  161. exportLoading: false,
  162. dialogFormVisible:false,
  163. // 选中数组
  164. ids: [],
  165. // 非单个禁用
  166. single: true,
  167. // 非多个禁用
  168. multiple: true,
  169. // 显示搜索条件
  170. showSearch: true,
  171. // 总条数
  172. total: 0,
  173. // 参数表格数据
  174. adminList: [
  175. {a:1,b:2,c:3,d:4,f:5}
  176. ],
  177. // 弹出层标题
  178. title: "",
  179. // 是否显示弹出层
  180. open: false,
  181. // 类型数据字典
  182. typeOptions: [],
  183. // 日期范围
  184. dateRange: [],
  185. // 查询参数
  186. queryParams: {
  187. current: 1,
  188. size: 10,
  189. name: undefined,
  190. aliasName: undefined,
  191. },
  192. statusList:[
  193. {value:"",label:"全部"},
  194. {value:"1",label:"有效"},
  195. {value:"2",label:"无效"},
  196. ],
  197. typeList:[
  198. {value:"",label:"全部"},
  199. {value:"1",label:"商品1"},
  200. {value:"2",label:"商品2"},
  201. ],
  202. // cycleList:[
  203. // {value:"",label:"全部"},
  204. // {value:"1",label:"每日"},
  205. // {value:"2",label:"每工作日"},
  206. // {value:"3",label:"周末"},
  207. // ],
  208. implementTimeStart:[],//执行开始时段
  209. implementTimeEnd:[],//执行结束时段
  210. cycleList:[
  211. {value:1,label:"周一"},
  212. {value:2,label:"周二"},
  213. {value:3,label:"周三"},
  214. {value:4,label:"周四"},
  215. {value:5,label:"周五"},
  216. {value:6,label:"周六"},
  217. {value:7,label:"周日"},
  218. {value:8,label:"每天"},
  219. {value:9,label:"每工作日"},
  220. {value:10,label:"周末"}
  221. ],
  222. // 表单参数
  223. form: {
  224. },
  225. checkList:[],
  226. // 表单校验
  227. rules: {
  228. name: [
  229. { required: true, message: "商品名称不能为空", trigger: "blur" }
  230. ],
  231. logo: [
  232. { required: true, message: "商品类型不能为空", trigger: "change" }
  233. ],
  234. logo: [
  235. { required: true, message: "重复周期不能为空", trigger: "change" }
  236. ],
  237. logo: [
  238. { required: true, message: "执行时段不能为空", trigger: "change" }
  239. ],
  240. logo: [
  241. { required: true, message: "单价不能为空", trigger: "change" }
  242. ],
  243. },
  244. };
  245. },
  246. created() {
  247. this.getList()
  248. this.zxtimeStart()
  249. this.zxtimeEnd()
  250. },
  251. methods: {
  252. /* 日期多选 */
  253. handleCheckedDatesChange(value){
  254. console.log(value,this.checkList)
  255. },
  256. /** 执行开始时间 */
  257. zxtimeStart(){
  258. let arr = []
  259. for(let i = 0; i<48;i++){
  260. arr[i] = {}
  261. if(i%2 == "NaN"){
  262. arr[i].value="00:00:00"
  263. }
  264. if(i%2 == "0"){
  265. if(i/2>=10){
  266. arr[i].value= i/2 + ":00:00"
  267. }else{
  268. arr[i].value="0" + i/2 + ":00:00"
  269. }
  270. }
  271. if(i%2 == "1"){
  272. if(i/2>=10){
  273. arr[i].value=(i-1)/2 + ":30:00"
  274. }else{
  275. arr[i].value="0" + (i-1)/2 + ":30:00"
  276. }
  277. }
  278. }
  279. this.implementTimeStart = arr
  280. },
  281. /** 执行开结束时间 */
  282. zxtimeEnd(){
  283. let arr = []
  284. for(let i = 0; i<49;i++){
  285. arr[i] = {}
  286. if(i%2 == "NaN"){
  287. arr[i].value="00:00:00"
  288. }
  289. if(i%2 == "0"){
  290. if(i/2>=10){
  291. arr[i].value= i/2 + ":00:00"
  292. }else{
  293. arr[i].value="0" + i/2 + ":00:00"
  294. }
  295. }
  296. if(i%2 == "1"){
  297. if(i/2>=10){
  298. arr[i].value=(i-1)/2 + ":30:00"
  299. }else{
  300. arr[i].value="0" + (i-1)/2 + ":30:00"
  301. }
  302. }
  303. }
  304. this.implementTimeEnd = arr.slice(1,arr.length)
  305. },
  306. /** 查询参数列表 */
  307. getList() {
  308. this.loading = true;
  309. getManage(this.queryParams).then(response => {
  310. this.adminList = response.data.records
  311. this.loading = false;
  312. })
  313. },
  314. // 取消按钮
  315. cancel() {
  316. this.open = false;
  317. this.reset();
  318. },
  319. // 表单重置
  320. reset() {
  321. this.form = {
  322. name: undefined,
  323. status: undefined,
  324. };
  325. this.resetForm("form");
  326. },
  327. /** 搜索按钮操作 */
  328. handleQuery() {
  329. this.queryParams.current = 1;
  330. if(this.queryParams.startTime && this.queryParams.endTime){
  331. let start = YearMonthDate().split(" ")[0] + " " + this.queryParams.startTime
  332. let end = YearMonthDate().split(" ")[0] + " " + this.queryParams.endTime
  333. if(getTimeFormat(end) <= getTimeFormat(start)){
  334. this.msgError("结束时间不能小于或等于开始时间");
  335. return
  336. }
  337. }
  338. this.getList();
  339. },
  340. /** 重置按钮操作 */
  341. resetQuery() {
  342. this.dateRange = [];
  343. this.resetForm("queryForm");
  344. this.handleQuery();
  345. },
  346. /** 新增按钮操作 */
  347. handleAdd() {
  348. this.form.id =undefined
  349. this.form.name =undefined
  350. this.form.introduce =undefined
  351. this.reset();
  352. this.open = true;
  353. this.title = "添加参数";
  354. },
  355. /** 修改按钮操作 */
  356. handleUpdate(row) {
  357. this.reset();
  358. this.form =JSON.stringify(row)
  359. this.open = true;
  360. this.title = "修改参数";
  361. },
  362. /** 提交按钮 */
  363. submitForm(row) {
  364. this.$refs["form"].validate(valid => {
  365. if (valid) {
  366. this.loading = true
  367. let start = YearMonthDate().split(" ")[0] + " " + this.form.startTime
  368. let end = YearMonthDate().split(" ")[0] + " " + this.form.endTime
  369. if(getTimeFormat(end) <= getTimeFormat(start)){
  370. this.msgError("结束时间不能小于或等于开始时间");
  371. return
  372. }
  373. if (this.form.id != undefined) {
  374. updataManage(this.form).then(response => {
  375. this.loading = false
  376. this.msgSuccess("修改成功");
  377. this.open = false;
  378. this.getList();
  379. }).catch(()=>{
  380. this.loading = false,
  381. this.open = false
  382. })
  383. } else {
  384. addManage(this.form).then(response => {
  385. this.loading = false
  386. this.msgSuccess("新增成功");
  387. this.open = false;
  388. this.getList();
  389. }).catch(()=>{
  390. this.loading = false,
  391. this.open = false
  392. })
  393. }
  394. }
  395. });
  396. },
  397. /** 删除按钮操作 */
  398. handleDelete(row) {
  399. const ids = row.id || this.ids;
  400. this.$confirm('是否确认删除', "警告", {
  401. confirmButtonText: "确定",
  402. cancelButtonText: "取消",
  403. type: "warning"
  404. }).then(function() {
  405. return delManage(ids);
  406. }).then(() => {
  407. this.getList();
  408. this.msgSuccess("删除成功");
  409. }).catch(() => {});
  410. },
  411. /** 刷新缓存按钮操作 */
  412. handleRefreshCache() {
  413. refreshCache().then(() => {
  414. this.msgSuccess("刷新成功");
  415. });
  416. },
  417. /** 导出按钮操作 */
  418. handleExport() {
  419. let queryParams = {...this.queryParams};
  420. delete queryParams.current
  421. delete queryParams.size
  422. this.exportLoading = true;
  423. exportManage(queryParams).then(response =>{
  424. this.exportLoading = false;
  425. localStorage.setItem('fileExportId', response.data)
  426. this.$router.push({path:'/recharge/fileExport'})
  427. })
  428. },
  429. }
  430. };
  431. </script>
  432. <style lang="scss" scoped>
  433. </style>