Commit 13a97f8d039ee0bfacf0eec6e318a24eac4c4bde

Authored by 杨泽宇
1 parent a26a53a6

活动删除接口

src/api/event/index.ts
... ... @@ -130,4 +130,17 @@ export const signupList = async (params: any) => {
130 130 params: params
131 131 })
132 132 return res
  133 +}
  134 +
  135 +/**
  136 + * @description 删除活动
  137 + * @function handworkDelete
  138 + */
  139 + export const handworkDelete = async (params: any) => {
  140 + let res: any = await request({
  141 + method: 'delete',
  142 + url: '/handwork/delete',
  143 + params: params
  144 + })
  145 + return res
133 146 }
134 147 \ No newline at end of file
... ...
src/views/event/config.ts
1 1 import type { EnumArrayItem } from "@/@type/module/basic"
2 2  
3   -interface Item {
4   - status: string,
5   - publish: string,
6   - value: number
7   -}
8   -
9 3 // 活动状态和总结状态
10   -export const statusData: Item[] = [
  4 +export const statusData: EnumArrayItem[] = [
11 5 {
12   - status: '草稿',
13   - publish: '',
  6 + label: '未开始',
14 7 value: 0
15 8 },
16 9 {
17   - status: '提交未开始',
18   - publish: '',
  10 + label: '进行中',
19 11 value: 1
20 12 },
21 13 {
22   - status: '进行中',
23   - publish: '',
  14 + label: '已结束',
24 15 value: 2
25 16 },
26   - {
27   - status: '已结束',
28   - publish: '',
29   - value: 3
30   - },
31   - {
32   - status: '活动结束',
33   - publish: '草稿',
34   - value: 4
35   - },
36   - {
37   - status: '活动结束',
38   - publish: '发布',
39   - value: 5
40   - }
41 17 ]
42 18  
43 19 // 活动评价展示到前台状态
... ...
src/views/event/handwork/edit.vue
... ... @@ -6,6 +6,7 @@ import { back } from "@/utils/tool";
6 6 import { getPropertyNbhds } from "@/api/community/residence";
7 7 import { useLoginStore } from "@/pinia/login";
8 8 import Photowall from "@/components/Photowall/index.vue";
  9 +import { ElMessageBox } from "element-plus";
9 10 import type { ElForm } from "element-plus";
10 11 let form = reactive({
11 12 data: {
... ... @@ -21,10 +22,9 @@ let form = reactive({
21 22 description: "",
22 23 id: null,
23 24 oid: useLoginStore()?.getOid ?? 0,
24   - organizer: "",
25 25 personLimit: null,
26 26 publicityPic: "",
27   - status: 0,
  27 + status: null,
28 28 processDesc: "",
29 29 neighborhoodId: "",
30 30 },
... ... @@ -40,44 +40,6 @@ let form = reactive({
40 40 const ruleFormRef = ref<InstanceType<typeof ElForm>>();
41 41 let instance: ComponentInternalInstance | null = getCurrentInstance();
42 42 /**
43   - * 结束时间要晚于开始时间
44   - */
45   -// const checkStartTime = (rules, value, callback) => {
46   -// if (checkTime(value, form.data.endTime)) {
47   -// callback();
48   -// } else {
49   -// callback(new Error("结束时间要晚于开始时间"));
50   -// }
51   -// };
52   -// const checkEndTime = (rules, value, callback) => {
53   -// if (checkTime(form.data.startTime, value)) {
54   -// callback();
55   -// } else {
56   -// callback(new Error("结束时间要晚于开始时间"));
57   -// }
58   -// };
59   -// const checkSignUpStartTime = (rules, value, callback) => {
60   -// if (checkTime(value, form.data.signupEndTime)) {
61   -// callback();
62   -// } else {
63   -// callback(new Error("报名结束时间要晚于报名开始时间"));
64   -// }
65   -// };
66   -// const checkSignUpEndTime = (rules, value, callback) => {
67   -// if (checkTime(form.data.signupStartTime, value)) {
68   -// callback();
69   -// } else {
70   -// callback(new Error("报名结束时间要晚于报名开始时间"));
71   -// }
72   -// };
73   -// const checkTime = (startTime, endTime, isAfterNow = false) => {
74   -// if (new Date(endTime).getTime() > new Date(startTime).getTime()) {
75   -// return true;
76   -// } else {
77   -// return false;
78   -// }
79   -// };
80   -/**
81 43 * 时间组件回调
82 44 * @param {array} value [开始时间, 结束时间]
83 45 */
... ... @@ -107,28 +69,11 @@ const rules = reactive({
107 69 trigger: "change",
108 70 },
109 71 ],
110   - startTime: [
111   - {
112   - required: true,
113   - message: "结束时间要晚于开始时间",
114   - trigger: "change",
115   - // validator: checkStartTime,
116   - },
117   - ],
118 72 endTime: [
119 73 {
120 74 required: true,
121 75 message: "结束时间要晚于开始时间",
122 76 trigger: "change",
123   - // validator: checkEndTime,
124   - },
125   - ],
126   - signupStartTime: [
127   - {
128   - required: true,
129   - message: "报名结束时间要晚于报名开始时间",
130   - trigger: "change",
131   - // validator: checkSignUpStartTime,
132 77 },
133 78 ],
134 79 signupEndTime: [
... ... @@ -136,14 +81,14 @@ const rules = reactive({
136 81 required: true,
137 82 message: "报名结束时间要晚于报名开始时间",
138 83 trigger: "change",
139   - // validator: checkSignUpEndTime,
140 84 },
141 85 ],
142 86 duration: [
143 87 {
144 88 required: true,
145   - message: "请填写活动时长",
  89 + message: "请填写活动时长数字",
146 90 trigger: "change",
  91 + type: "number",
147 92 },
148 93 ],
149 94 location: [
... ... @@ -158,6 +103,15 @@ const rules = reactive({
158 103 required: true,
159 104 message: "请填写活动单价",
160 105 trigger: "change",
  106 + type: "number",
  107 + },
  108 + ],
  109 + personLimit: [
  110 + {
  111 + required: false,
  112 + message: "请填写人数限制",
  113 + trigger: "change",
  114 + type: "number",
161 115 },
162 116 ],
163 117 description: [
... ... @@ -186,24 +140,27 @@ const submitForm = (
186 140 if (!formEl) return;
187 141 formEl.validate(async (valid) => {
188 142 if (valid) {
189   - form.data.publicityPic = form.publicityPic
190   - .map((item) => item.url)
191   - .join(",");
192   - handworkEdit(form.data)
193   - .then((res) => {
194   - if (res) {
195   - instance?.proxy?.$message.success("操作成功");
196   - back();
197   - } else {
198   - instance?.proxy?.$message.error("操作失败");
  143 + if (type) {
  144 + ElMessageBox.confirm(
  145 + "是否确定发布?(确认发布后将不可进行修改)",
  146 + "提示",
  147 + {
  148 + confirmButtonText: "确认",
  149 + cancelButtonText: "取消",
  150 + type: "warning",
199 151 }
200   - })
201   - .catch((error) => {
202   - console.log(error);
203   - })
204   - .finally(() => {
205   - form.loading = false;
206   - });
  152 + )
  153 + .then((res) => {
  154 + form.data.status = 1;
  155 + postApi(type);
  156 + })
  157 + .catch((error) => {
  158 + console.log(error);
  159 + });
  160 + } else {
  161 + form.data.status = 0;
  162 + postApi(type);
  163 + }
207 164 } else {
208 165 instance?.proxy?.$message.error("请检查表单格式");
209 166 form.loading = false;
... ... @@ -212,6 +169,26 @@ const submitForm = (
212 169 });
213 170 };
214 171 /**
  172 + * 表单提交接口
  173 + * @param {number} type 1发布 0保存
  174 + */
  175 +const postApi = async (type: number) => {
  176 + form.data.publicityPic = form.publicityPic.map((item) => item.url).join(",");
  177 + handworkEdit(form.data)
  178 + .then((res) => {
  179 + if (res) {
  180 + instance?.proxy?.$message.success(type ? "发布成功" : "已存为草稿");
  181 + history.go(-1);
  182 + }
  183 + })
  184 + .catch((error) => {
  185 + console.log(error);
  186 + })
  187 + .finally(() => {
  188 + form.loading = false;
  189 + });
  190 +};
  191 +/**
215 192 * 活动分类
216 193 * @param {number | null} pageSize 一次请求多少条数据
217 194 */
... ... @@ -262,17 +239,29 @@ onMounted(() =&gt; {
262 239 if (JSON.stringify(useRoute().query) === "{}") {
263 240 form.dataType = "add";
264 241 } else {
265   - console.log(useRoute().query);
266 242 form.dataType = "edit";
267 243 form.data = useRoute().query;
  244 + form.data.personLimit = ~~useRoute().query.personLimit;
  245 + form.data.unitPrice = ~~useRoute().query.unitPrice;
  246 + form.data.duration = ~~useRoute().query.duration;
268 247 form.data.craftId = ~~useRoute().query.craftId;
269   - useRoute()
270   - .query.publicityPic.split(",")
271   - .map((item) => {
272   - form.publicityPic.push({
273   - url: item,
  248 + form.value1 = [useRoute().query.startTime, useRoute().query.endTime];
  249 + form.value2 = [
  250 + useRoute().query.signupStartTime,
  251 + useRoute().query.signupEndTime,
  252 + ];
  253 + form.communityList = useRoute()
  254 + .query.neighborhoodId.split(",")
  255 + .map((i) => i / 1);
  256 + if (useRoute().query.publicityPic) {
  257 + useRoute()
  258 + .query.publicityPic.split(",")
  259 + .map((item) => {
  260 + form.publicityPic.push({
  261 + url: item,
  262 + });
274 263 });
275   - });
  264 + }
276 265 }
277 266 });
278 267 </script>
... ... @@ -310,25 +299,7 @@ onMounted(() =&gt; {
310 299 ></el-option>
311 300 </el-select>
312 301 </el-form-item>
313   - <!-- <el-form-item label="开始时间" prop="startTime" style="width: 50%">
314   - <el-date-picker
315   - v-model="form.data.startTime"
316   - type="datetime"
317   - format="YYYY-MM-DD HH:mm:ss"
318   - placeholder="请选择开始时间"
319   - >
320   - </el-date-picker>
321   - </el-form-item>
322   - <el-form-item label="结束时间" prop="endTime" style="width: 50%">
323   - <el-date-picker
324   - v-model="form.data.endTime"
325   - type="datetime"
326   - format="YYYY-MM-DD HH:mm:ss"
327   - placeholder="请选择结束时间"
328   - >
329   - </el-date-picker>
330   - </el-form-item> -->
331   - <el-form-item label="活动时间" prop="startTime" style="width: 100%">
  302 + <el-form-item label="活动时间" prop="endTime" style="width: 100%">
332 303 <el-date-picker
333 304 v-model="form.value1"
334 305 type="datetimerange"
... ... @@ -339,11 +310,7 @@ onMounted(() =&gt; {
339 310 @change="handleTimeChange"
340 311 ></el-date-picker>
341 312 </el-form-item>
342   - <el-form-item
343   - label="报名时间"
344   - prop="signupStartTime"
345   - style="width: 100%"
346   - >
  313 + <el-form-item label="报名时间" prop="signupEndTime" style="width: 100%">
347 314 <el-date-picker
348 315 v-model="form.value2"
349 316 type="datetimerange"
... ... @@ -354,35 +321,9 @@ onMounted(() =&gt; {
354 321 @change="handleSignupTimeChange"
355 322 ></el-date-picker>
356 323 </el-form-item>
357   - <!-- <el-form-item
358   - label="报名开始时间"
359   - prop="signupStartTime"
360   - style="width: 50%"
361   - >
362   - <el-date-picker
363   - v-model="form.data.signupStartTime"
364   - type="datetime"
365   - format="YYYY-MM-DD HH:mm:ss"
366   - placeholder="请选择报名开始时间"
367   - >
368   - </el-date-picker>
369   - </el-form-item>
370   - <el-form-item
371   - label="报名结束时间"
372   - prop="signupEndTime"
373   - style="width: 50%"
374   - >
375   - <el-date-picker
376   - v-model="form.data.signupEndTime"
377   - type="datetime"
378   - format="YYYY-MM-DD HH:mm:ss"
379   - placeholder="请选择报名结束时间"
380   - >
381   - </el-date-picker>
382   - </el-form-item> -->
383 324 <el-form-item label="活动时长" prop="duration" style="width: 50%">
384 325 <el-input
385   - v-model.trim="form.data.duration"
  326 + v-model.number="form.data.duration"
386 327 placeholder="请填写活动时长"
387 328 >
388 329 <template #append>小时</template>
... ... @@ -390,7 +331,7 @@ onMounted(() =&gt; {
390 331 </el-form-item>
391 332 <el-form-item label="活动单价" prop="unitPrice" style="width: 50%">
392 333 <el-input
393   - v-model.trim="form.data.unitPrice"
  334 + v-model.number="form.data.unitPrice"
394 335 placeholder="请填写活动单价"
395 336 >
396 337 <template #append>元</template>
... ... @@ -423,16 +364,9 @@ onMounted(() =&gt; {
423 364 type="textarea"
424 365 />
425 366 </el-form-item>
426   - <el-form-item label="组织者" prop="organizer" style="width: 50%">
427   - <el-input
428   - v-model.trim="form.data.organizer"
429   - placeholder="请填写活动组织者"
430   - maxlength="15"
431   - />
432   - </el-form-item>
433 367 <el-form-item label="人数限制" prop="personLimit" style="width: 50%">
434 368 <el-input
435   - v-model.trim="form.data.personLimit"
  369 + v-model.number="form.data.personLimit"
436 370 placeholder="请填写人数限制"
437 371 maxlength="15"
438 372 />
... ... @@ -458,11 +392,20 @@ onMounted(() =&gt; {
458 392 </el-checkbox-group>
459 393 <span class="tip" v-else>暂无小区</span>
460 394 </el-form-item>
  395 + <!-- 新增活动的时候,只有保存按钮
  396 + 编辑活动的时候,可以保存、可以发布,提交接口用status区分,1为发布,需要二次确认,0为保存 -->
461 397 <el-form-item style="width: 100%" v-show="form.dataType !== 'detail'">
462 398 <el-button
463 399 type="primary"
464   - @click.prevent="submitForm(ruleFormRef)"
  400 + @click.prevent="submitForm(ruleFormRef, 0)"
  401 + :loading="form.loading"
  402 + >保存</el-button
  403 + >
  404 + <el-button
  405 + type="success"
  406 + @click.prevent="submitForm(ruleFormRef, 1)"
465 407 :loading="form.loading"
  408 + v-show="form.dataType === 'edit'"
466 409 >发布</el-button
467 410 >
468 411 <el-button
... ...
src/views/event/handwork/index.vue
1 1 <script setup lang="ts">
2 2 import { reactive, ref, onMounted } from "vue";
3   -import { handworkList, eventCategory } from "@/api/event";
  3 +import { handworkList, eventCategory, handworkDelete } from "@/api/event";
4 4 import { parseTime } from "@/utils/tool";
5 5 import { statusData } from "./../config";
6 6 import { useLoginStore } from "@/pinia/login";
... ... @@ -88,6 +88,41 @@ const getCategory = async (pageSize: number = 20) =&gt; {
88 88 console.log(e);
89 89 }
90 90 };
  91 +/**
  92 + * 活动删除
  93 + * @param {number | string} id 活动id
  94 + */
  95 +const handleDelete = (id: number | string) => {
  96 + ElMessageBox.confirm("是否确定删除该活动?", "提示", {
  97 + confirmButtonText: "确认",
  98 + cancelButtonText: "取消",
  99 + type: "warning",
  100 + })
  101 + .then(async () => {
  102 + try {
  103 + const res = await handworkDelete({
  104 + handworkId: id,
  105 + });
  106 + if (res?.data) {
  107 + ElMessage({
  108 + type: "success",
  109 + message: "操作成功",
  110 + });
  111 + getList()
  112 + } else {
  113 + ElMessage({
  114 + type: "error",
  115 + message: "操作失败",
  116 + });
  117 + }
  118 + } catch (e) {
  119 + console.log(e);
  120 + }
  121 + })
  122 + .catch((error) => {
  123 + console.log(error);
  124 + });
  125 +};
91 126 onMounted(() => {
92 127 getList();
93 128 getCategory();
... ... @@ -99,7 +134,7 @@ onMounted(() =&gt; {
99 134 <!-- <h1>手工活动</h1> -->
100 135 <el-row style="padding-bottom: 20px">
101 136 <el-form :inline="true" label-width="70px">
102   - <el-form-item label="时间">
  137 + <el-form-item label="活动时间">
103 138 <el-date-picker
104 139 v-model="value1"
105 140 type="datetimerange"
... ... @@ -121,7 +156,7 @@ onMounted(() =&gt; {
121 156 >
122 157 <el-option
123 158 v-for="(item, index) in statusData"
124   - :label="item.status"
  159 + :label="item.label"
125 160 :value="item.value"
126 161 ></el-option>
127 162 </el-select>
... ... @@ -165,18 +200,20 @@ onMounted(() =&gt; {
165 200 </template>
166 201 </el-table-column>
167 202 <el-table-column
168   - prop="organizer"
169   - label="发布人"
170   - align="center"
171   - ></el-table-column>
172   - <el-table-column
173 203 prop="signupNum"
174 204 label="参与人数"
175 205 align="center"
176 206 ></el-table-column>
177   - <el-table-column prop="startTime" label="开始时间" align="center">
  207 + <el-table-column prop="startTime" label="活动时间" align="center">
178 208 <template #default="scope">
179   - {{ parseTime(new Date(scope.row.startTime).getTime()) }}
  209 + {{ parseTime(new Date(scope.row.startTime).getTime()) }} ~
  210 + {{ parseTime(new Date(scope.row.endTime).getTime()) }}
  211 + </template>
  212 + </el-table-column>
  213 + <el-table-column prop="startTime" label="活动报名时间" align="center">
  214 + <template #default="scope">
  215 + {{ parseTime(new Date(scope.row.signupStartTime).getTime()) }} ~
  216 + {{ parseTime(new Date(scope.row.signupEndTime).getTime()) }}
180 217 </template>
181 218 </el-table-column>
182 219 <el-table-column
... ... @@ -195,18 +232,19 @@ onMounted(() =&gt; {
195 232 align="center"
196 233 ></el-table-column>
197 234 <el-table-column prop="status" label="活动状态" align="center">
  235 + <!-- 活动状态值是当前时间和活动开始结束时间对比的结果
  236 + 当前时间晚于活动结束时间,即活动已结束
  237 + 当前时间早于活动开始时间,即活动未开始
  238 + 当前时间介于活动开始、结束时间之间(含),即活动进行中 -->
198 239 <template #default="scope">
199   - {{ statusData.find((u) => u.value === scope.row.status)["status"] }}
200   - </template>
201   - </el-table-column>
202   - <el-table-column prop="status" label="发布总结" align="center">
203   - <template #default="scope">
204   - {{ statusData.find((u) => u.value === scope.row.status)["publish"] }}
  240 + <span v-show="new Date(scope.row.endTime) < new Date()">已结束</span>
  241 + <span v-show="new Date(scope.row.startTime) > new Date()">未开始</span>
  242 + <span v-show="new Date(scope.row.startTime) <= new Date() && new Date(scope.row.endTime) >= new Date()">进行中</span>
205 243 </template>
206 244 </el-table-column>
207 245 <el-table-column label="操作" align="center">
208 246 <template #default="scope">
209   - <el-button type="text" :disabled="~~scope.row.status !== 0"
  247 + <el-button type="text"
210 248 ><router-link
211 249 :to="{ path: '/event/handwork/edit', query: scope.row }"
212 250 >编辑</router-link
... ... @@ -218,6 +256,9 @@ onMounted(() =&gt; {
218 256 >查看人员</router-link
219 257 ></el-button
220 258 >
  259 + <el-button type="text" @click="handleDelete(scope.row.id)"
  260 + >删除</el-button
  261 + >
221 262 </template>
222 263 </el-table-column>
223 264 </el-table>
... ...