EditItem.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <div class="card">
  3. <el-form ref="formRef" :model="form" :rules="formRule" label-width="auto" :label-position="'right'" class="form"
  4. :size="formsize" v-if="show">
  5. <el-form-item label="项目名称" prop="name">
  6. <el-input v-model="form.name" placeholder="请输入项目名称" />
  7. </el-form-item>
  8. <el-form-item label="参与人" prop="user">
  9. <el-input v-model="form.user" placeholder="请输入参与人姓名,用 | 分隔" />
  10. </el-form-item>
  11. <el-form-item label="管理员" prop="admin" v-if="createUser === App.user.uuid">
  12. <el-input v-model="form.admin" placeholder="请输入管理员姓名,用 | 分隔" />
  13. </el-form-item>
  14. <el-form-item label="打卡星期" prop="day_of_week">
  15. <el-select v-model="form.day_of_week" placeholder="请选择星期">
  16. <el-option label="星期一" value="1" />
  17. <el-option label="星期二" value="2" />
  18. <el-option label="星期三" value="3" />
  19. <el-option label="星期四" value="4" />
  20. <el-option label="星期五" value="5" />
  21. <el-option label="星期六" value="6" />
  22. <el-option label="星期日" value="0" />
  23. </el-select>
  24. </el-form-item>
  25. <el-form-item label="每周循环" prop="loopy">
  26. <el-radio-group v-model="form.loopy">
  27. <el-radio label="是" />
  28. <el-radio label="否" />
  29. </el-radio-group>
  30. </el-form-item>
  31. <el-form-item label="打卡时间" prop="time">
  32. <el-config-provider :locale="zhCn">
  33. <el-time-picker v-model="form.time" is-range range-separator="~" :start-placeholder="form.time[0]"
  34. :end-placeholder="form.time[1]" value-format="HH:mm:ss" />
  35. </el-config-provider>
  36. </el-form-item>
  37. <el-form-item label="打卡半径" prop="radius">
  38. <el-input v-model="form.radius" type="number" placeholder="输入打卡范围半径 单位米" />
  39. </el-form-item>
  40. <el-form-item label="打卡地点" prop="address">
  41. <el-input v-model="form.address" placeholder="请在地图中选择地点" disabled />
  42. </el-form-item>
  43. <el-form-item label="经纬度" prop="endtime">
  44. <el-input v-model="form.position" placeholder="请在地图中选择地点" disabled />
  45. </el-form-item>
  46. </el-form>
  47. <MapContainer :position="form.position" :radius="form.radius" @update="update" />
  48. <el-button class="button" round @click="onSubmit(formRef)">提交</el-button>
  49. </div>
  50. </template>
  51. <script setup>
  52. import { useRouter } from 'vue-router';
  53. import { ServerAPI } from '../../../../app/lib/ServerAPI';
  54. import { App } from '../../../../app/app';
  55. import MapContainer from './MapContainer.vue';
  56. import zhCn from 'element-plus/es/locale/lang/zh-cn';
  57. let formsize = ref("large");
  58. let router = useRouter();
  59. let props = defineProps({
  60. id: {
  61. type: Number
  62. }
  63. });
  64. if (window.innerWidth <= 768) {
  65. formsize.value = ''
  66. }
  67. if (!App.hasUser()) {
  68. ElMessage({
  69. message: "请登录",
  70. type: 'warning',
  71. });
  72. //前往登录
  73. router.replace({
  74. name: "Login"
  75. });
  76. }
  77. let formRef = ref();
  78. let show = ref(false);
  79. let createUser = ref('');
  80. let form = reactive({
  81. name: '',
  82. user: '',
  83. admin: '',
  84. day_of_week: '',
  85. loopy: false,
  86. time: '',
  87. loopy: '否',
  88. address: '',
  89. position: [106.5799475868821, 29.504864472181577],
  90. radius: 50
  91. });
  92. onMounted(() => {
  93. ServerAPI.GetAttendanceItemDetail(App.user.uuid, App.user.session, props.id, (r) => {
  94. if(r && r.code === 0) {
  95. Object.assign(form, r.data);
  96. form.time = [r.data.begintime, r.data.endtime];
  97. r.data.loopy === 1 ? form.loopy = '是' : form.loopy = '否';
  98. form.user = r.data.user.map(uuid => r.userInfo[uuid].username).join('|');
  99. if(form.admin) {
  100. form.admin = r.data.admin.map(uuid => r.userInfo[uuid].username).join('|');
  101. }
  102. createUser.value = r.data.createUser;
  103. show.value = true
  104. } else {
  105. ElMessage.error('获取项目详情失败!');
  106. }
  107. })
  108. })
  109. let formRule = reactive({
  110. name: [
  111. { required: true, message: '此项为必填项' },
  112. { min: 2, max: 18, message: '长度应为2-18位' }
  113. ],
  114. user: [
  115. { required: true, message: '此项为必填项' }
  116. ],
  117. day_of_week: [
  118. { required: true, message: '此项为必填项' }
  119. ],
  120. loopy: [
  121. { required: true, message: '此项为必填项' }
  122. ],
  123. time: [
  124. { required: true, message: '此项为必填项' }
  125. ],
  126. radius: [
  127. { required: true, message: '此项为必填项' }
  128. ],
  129. })
  130. let update = (data, address) => {
  131. form.position = data;
  132. form.address = address;
  133. }
  134. let onSubmit = async function (formEl) {
  135. if (!App.hasUser()) {
  136. ElMessage({
  137. message: "请登录",
  138. type: 'warning',
  139. });
  140. router.replace({
  141. name: "Login",
  142. });
  143. return;
  144. }
  145. if (!formEl) return;
  146. await formEl.validate((valid, fields) => {
  147. if (!valid) {
  148. ElMessage({
  149. message: "请检查填写的内容",
  150. type: "warning"
  151. });
  152. return;
  153. }
  154. let data = {
  155. uuid: App.user.uuid,
  156. session: App.user.session,
  157. id: props.id,
  158. name: form.name,
  159. admin: form.admin,
  160. user: form.user,
  161. day_of_week: form.day_of_week,
  162. loopy: form.loopy == "是" ? 1 : 0,
  163. begintime: form.time[0],
  164. endtime: form.time[1],
  165. address: form.address,
  166. position: form.position,
  167. radius: form.radius
  168. };
  169. ServerAPI.EditAttendanceItems(data, (r) => {
  170. if (r == undefined) {
  171. ElMessage.error('服务器未响应');
  172. return;
  173. }
  174. if (r.code != 0) {
  175. ElMessage({
  176. message: `修改失败!${r.msg}`,
  177. type: "error"
  178. });
  179. return;
  180. }
  181. ElMessage.success('已成功修改!');
  182. router.go(0);
  183. })
  184. })
  185. }
  186. </script>
  187. <style scoped>
  188. .card {
  189. display: flex;
  190. flex-direction: column;
  191. align-items: center;
  192. }
  193. .form {
  194. width: 60%;
  195. margin: 0 auto;
  196. color: black;
  197. }
  198. .button {
  199. background-color: #337ecc;
  200. color: white;
  201. width: 200px;
  202. border: none;
  203. margin-top: 20px;
  204. }
  205. @media only screen and (max-width: 768px) {
  206. .card {
  207. background-color: rgba(255, 255, 255, 0.6);
  208. width: 80%;
  209. border-radius: 10px;
  210. padding: 20px;
  211. }
  212. .form {
  213. width: 100%;
  214. }
  215. }
  216. </style>