diff --git a/package.json b/package.json index b3820ed..f357e33 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "axios": "0.18.1", "core-js": "3.6.5", "echarts": "^5.0.0", - "element-ui": "2.13.2", + "element-ui": "^2.15.14", "js-cookie": "2.2.0", "moment": "^2.29.4", "normalize.css": "7.0.0", diff --git a/src/store/modules/user.js b/src/store/modules/user.js index de1542a..fdcb055 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -9,6 +9,7 @@ const getDefaultState = () => { avatar: '', username: '', adminId: '', + yearHoliday: 0, department: {}, role: [], } @@ -35,6 +36,9 @@ const mutations = { SET_ADMIN_ID: (state, id) => { state.adminId = id }, + SET_YEAR_HOLIDAY: (state, day) => { + state.yearHoliday = day + }, SET_DEPARTMENT: (state, department) => { state.department = department }, @@ -65,7 +69,7 @@ const actions = { return new Promise((resolve, reject) => { getInfo(state.token).then(response => { - const { name, avatar, id, role, department, username } = response + const { name, avatar, id, role, department, username, year_holiday } = response commit('SET_DEPARTMENT',department) commit('SET_NAME', name) @@ -73,6 +77,7 @@ const actions = { commit('SET_ADMIN_ID', id) commit('SET_ROLE', role) commit('SET_USERNAME', username) + commit('SET_YEAR_HOLIDAY', year_holiday??0) resolve(response) }).catch(error => { reject(error) diff --git a/src/utils/formBuilder.js b/src/utils/formBuilder.js index 110327f..f2a05c7 100644 --- a/src/utils/formBuilder.js +++ b/src/utils/formBuilder.js @@ -3,6 +3,7 @@ import { CreateElement, VNode } from "vue"; import moment from "moment"; import { getToken } from "@/utils/auth"; import { deepCopy } from "@/utils/index"; +import { flowList } from "@/api/flow" /** * @param {String} device 'desktop' or 'mobile' * @param {Object} info field参数 @@ -15,12 +16,12 @@ import { deepCopy } from "@/utils/index"; export default function formBuilder(device, info, h, row, pWrite = false,pReadable = false) { let formItem; //下拉选项 + let options = []; if (info?.selection_model) { options = info.selection_model_items; } else if (info?.stub) { options = info?.stub?.split(/\r\n/) || []; } - let options; if (device === "desktop") { // 可写并且不为查看和子表单下 if ( @@ -516,7 +517,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab formBuilderMap(device).get(info.type), { props: { - value: row ? row[info.name] : this.form[info.name], + value: row ? (row[info.name] ? row[info.name].split(',').map(i => Number(i)) : []) : (this.form[info.name] ? this.form[info.name].split('|').map(i => Number(i)) : []), clearable: true, placeholder: info.help_text, multiple: true, @@ -530,16 +531,16 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab on: { input: (e) => { row - ? this.$set(row, info.name, e) - : this.$set(this.form, info.name, e); + ? this.$set(row, info.name, e.toString()) + : this.$set(this.form, info.name, e.toString()); }, }, }, - options.map((option) => + this.flows.map((option) => h("el-option", { props: { - label: option, - value: option, + label: option.title, + value: option.id, }, }) ) @@ -756,6 +757,21 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab })?.toString() : typeof findChoicesValue === "object" ? findChoicesValue.name : findChoicesValue ); break; + case "relation-flow": + formItem = h( + "span", + { + style: { + color: "#333", + }, + }, + this.form[info.name]?.toString()?.split(',').map(j => { + return this.flows.find((i) => + i.id == j + )?.title; + })?.toString() + ); + break; case "file": formItem = h( formBuilderMap(device).get(info.type), @@ -980,6 +996,10 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab this.multipleSelectOption.forFormName = info.name; this.multipleSelectOption.originalObj = row; this.$set(this.multipleSelectOption, "columns", options); + this.$set(this.multipleSelectOption, "options", { + label: 'name', + value: 'id' + }); this.$set(this.multipleSelectOption, "multipleLimit", info.multiple); this.$set(this.multipleSelectOption, "isShow", true); }, @@ -1105,6 +1125,32 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab ) ]) break; + case 'relation-flow': + formItem = h("van-field", { + props: { + readonly: true, + clickable: true, + name: info.name, + label: info.label, + value: typeof findValue === "object" ? (findValue.name || findValue.title) : findValue, + clearable: true, + placeholder: info.help_text, + }, + on: { + click: (_) => { + this.multipleSelectOption.forFormName = info.name; + this.multipleSelectOption.originalObj = row; + this.$set(this.multipleSelectOption, "columns", this.flows); + this.$set(this.multipleSelectOption, "options", { + label: 'title', + value: 'id' + }); + this.$set(this.multipleSelectOption, "multipleLimit", info.multiple); + this.$set(this.multipleSelectOption, "isShow", true); + }, + }, + }); + break; case "relation": let copySubForm = deepCopy(this.form[info.name][0]) formItem = h("div", [ diff --git a/src/utils/request.js b/src/utils/request.js index d728d8d..a1cf8b0 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -18,7 +18,7 @@ const loading = throttle(() => { const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url // withCredentials: true, // send cookies when cross-domain requests - timeout: 10000 // request timeout + timeout: 20000 // request timeout }) // request interceptor diff --git a/src/views/attendance/components/MonthStatics.vue b/src/views/attendance/components/MonthStatics.vue index 451ea79..1271546 100644 --- a/src/views/attendance/components/MonthStatics.vue +++ b/src/views/attendance/components/MonthStatics.vue @@ -2,33 +2,74 @@
{{ item.sign_at_address }}{{ item.sign_at_image ? '(外勤)' : '' }}
+