Merge remote-tracking branch 'origin/master'
| | |
| | | "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", |
| | | "dev": true |
| | | }, |
| | | "ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "color-convert": "^2.0.1" |
| | | } |
| | | }, |
| | | "chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "ansi-styles": "^4.1.0", |
| | | "supports-color": "^7.1.0" |
| | | } |
| | | }, |
| | | "color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "color-name": "~1.1.4" |
| | | } |
| | | }, |
| | | "color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "loader-utils": { |
| | | "version": "2.0.4", |
| | | "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", |
| | | "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "big.js": "^5.2.2", |
| | | "emojis-list": "^3.0.0", |
| | | "json5": "^2.1.2" |
| | | } |
| | | }, |
| | | "ssri": { |
| | | "version": "8.0.1", |
| | | "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", |
| | |
| | | "dev": true, |
| | | "requires": { |
| | | "minipass": "^3.1.1" |
| | | } |
| | | }, |
| | | "supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "has-flag": "^4.0.0" |
| | | } |
| | | }, |
| | | "vue-loader-v16": { |
| | | "version": "npm:vue-loader@16.8.3", |
| | | "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", |
| | | "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "chalk": "^4.1.0", |
| | | "hash-sum": "^2.0.0", |
| | | "loader-utils": "^2.0.0" |
| | | } |
| | | } |
| | | } |
| | |
| | | "big.js": { |
| | | "version": "5.2.2", |
| | | "resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz?cache=0&sync_timestamp=1620132748267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbig.js%2Fdownload%2Fbig.js-5.2.2.tgz", |
| | | "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", |
| | | "dev": true |
| | | "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=" |
| | | }, |
| | | "binary-extensions": { |
| | | "version": "2.2.0", |
| | |
| | | "integrity": "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=", |
| | | "dev": true |
| | | }, |
| | | "dayjs": { |
| | | "version": "1.11.11", |
| | | "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", |
| | | "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" |
| | | }, |
| | | "de-indent": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", |
| | |
| | | "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1612643435705&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz", |
| | | "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=", |
| | | "dev": true |
| | | }, |
| | | "el-tree-transfer": { |
| | | "version": "2.4.7", |
| | | "resolved": "https://registry.npmjs.org/el-tree-transfer/-/el-tree-transfer-2.4.7.tgz", |
| | | "integrity": "sha512-wcjQyqzmiJMDhF3qHR1NcqXp27Q65Td1EsMOVkqqOo9Z2mkVC+cGJEu3V4L90x8c1XgEciQL7tMuSjCP7/8G4g==", |
| | | "requires": { |
| | | "lodash": "^4.17.20", |
| | | "wl-core": "^1.1.4" |
| | | } |
| | | }, |
| | | "electron-to-chromium": { |
| | | "version": "1.3.728", |
| | |
| | | } |
| | | } |
| | | }, |
| | | "vue-loader-v16": { |
| | | "version": "npm:vue-loader@16.8.3", |
| | | "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", |
| | | "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "chalk": "^4.1.0", |
| | | "hash-sum": "^2.0.0", |
| | | "loader-utils": "^2.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "color-convert": "^2.0.1" |
| | | } |
| | | }, |
| | | "chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "ansi-styles": "^4.1.0", |
| | | "supports-color": "^7.1.0" |
| | | } |
| | | }, |
| | | "color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "color-name": "~1.1.4" |
| | | } |
| | | }, |
| | | "color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "loader-utils": { |
| | | "version": "2.0.4", |
| | | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", |
| | | "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "big.js": "^5.2.2", |
| | | "emojis-list": "^3.0.0", |
| | | "json5": "^2.1.2" |
| | | } |
| | | }, |
| | | "supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "has-flag": "^4.0.0" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "vue-property-decorator": { |
| | | "version": "8.5.1", |
| | | "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", |
| | |
| | | "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz", |
| | | "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==" |
| | | }, |
| | | "wl-core": { |
| | | "version": "1.1.9", |
| | | "resolved": "https://registry.npmjs.org/wl-core/-/wl-core-1.1.9.tgz", |
| | | "integrity": "sha512-7L83qEnrVW3YmPVqSwnlagoWJyVq/uSXkCFzND64nwtSdDm7o1RZQWiVgQcEilZxE0qLrRQKmjuAihNT6fWCjA==", |
| | | "requires": { |
| | | "big.js": "^5.2.2", |
| | | "dayjs": "^1.8.25" |
| | | } |
| | | }, |
| | | "word-wrap": { |
| | | "version": "1.2.3", |
| | | "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", |
| | |
| | | "axios": "^0.21.1", |
| | | "core-js": "^3.6.5", |
| | | "echarts": "^5.4.3", |
| | | "el-tree-transfer": "^2.4.7", |
| | | "element-tiptap": "^1.27.1", |
| | | "element-ui": "^2.3.6", |
| | | "js-cookie": "^2.2.1", |
| | |
| | | margin: 0; |
| | | overflow: scroll; |
| | | overflow: hidden; |
| | | font-size: 14px; |
| | | scrollbar-width: none; /* firefox */ |
| | | -ms-overflow-style: none; /* IE 10+ */ |
| | | &::-webkit-scrollbar { |
| | |
| | | top: 1px; |
| | | } |
| | | } |
| | | |
| | | .main_app { |
| | | background-color: #fff; |
| | | padding: 30px; |
| | | margin: 0 16px; |
| | | } |
| | | /** åºç¡éç¨ **/ |
| | | // å¤§å° å¤è¾¹è· |
| | | .flex1{ |
| | | flex: 1; |
| | | } |
| | | .w100{ |
| | | width: 100px !important; |
| | | } |
| | | .w120{ |
| | | width: 120px !important; |
| | | } |
| | | .w200{ |
| | | width: 200px !important; |
| | | } |
| | | .w300{ |
| | | width: 300px; |
| | | } |
| | | .w400{ |
| | | width: 400px !important; |
| | | } |
| | | .pt5 { |
| | | padding-top: 5px; |
| | | } |
| | | |
| | | .pr5 { |
| | | padding-right: 5px; |
| | | } |
| | | |
| | | .pb5 { |
| | | padding-bottom: 5px; |
| | | } |
| | | |
| | | .mt5 { |
| | | margin-top: 5px; |
| | | } |
| | | |
| | | .mr5 { |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .mb5 { |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | .mb8 { |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .ml5 { |
| | | margin-left: 5px; |
| | | } |
| | | |
| | | .mt10 { |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .mr10 { |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .mb10 { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .ml10 { |
| | | margin-left: 10px; |
| | | } |
| | | |
| | | .mt20 { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .mr20 { |
| | | margin-right: 20px; |
| | | } |
| | | |
| | | .mb20 { |
| | | margin-bottom: 20px; |
| | | } |
| | | .red{ |
| | | color: red !important; |
| | | } |
| | | .table_btns{ |
| | | border-bottom: 1px solid #eee; |
| | | padding-bottom: 10px; |
| | | } |
| | | .ml20 { |
| | | margin-left: 20px; |
| | | } |
| | | .mt30 { |
| | | margin-top: 30px; |
| | | } |
| | | |
| | | .mr30 { |
| | | margin-right: 30px; |
| | | } |
| | | |
| | | .mb30 { |
| | | margin-bottom: 30px; |
| | | } |
| | | .pr20{ |
| | | padding-right: 20px; |
| | | } |
| | | |
| | | .ml30 { |
| | | margin-left: 30px; |
| | | } |
| | | .h24{ |
| | | height: 24px; |
| | | line-height: 24px; |
| | | } |
| | | |
| | | // flexå¸å± |
| | | .df{ |
| | | display: flex; |
| | | } |
| | | .df_ac{ |
| | | display: flex; |
| | | align-items: center; |
| | | p { |
| | | margin: 0; |
| | | } |
| | | } |
| | | .df_sb{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | // ææ¬æ ·å¼ |
| | | .underline{ |
| | | text-decoration: underline; |
| | | } |
| | | .fs12{ |
| | | font-size: 12px; |
| | | } |
| | | .fs_12{ |
| | | font-size: 12px; |
| | | } |
| | | .fs_16{ |
| | | font-size: 16px; |
| | | } |
| | | .fs_18{ |
| | | font-size: 18px; |
| | | } |
| | | .fs_24{ |
| | | font-size: 24px; |
| | | } |
| | | .text{ |
| | | color: #333333; |
| | | } |
| | | .tac{ |
| | | text-align: center; |
| | | } |
| | |
| | | <div v-if="withFooter" class="window__footer"> |
| | | <slot name="footer"> |
| | | <el-button @click="confirm" :loading="confirmWorking" type="primary">{{text}}</el-button> |
| | | <el-button @click="close">è¿å</el-button> |
| | | <slot name="btns" /> |
| | | <el-button @click="close">{{ backText }}</el-button> |
| | | </slot> |
| | | </div> |
| | | </el-drawer> |
| | |
| | | type: String, |
| | | default: 'ç¡®å®' |
| | | }, |
| | | backText: { |
| | | type: String, |
| | | default: 'è¿å' |
| | | }, |
| | | // 确认æé®loadingç¶æ |
| | | confirmWorking: { |
| | | type: Boolean, |
| | |
| | | this.$emit('confirm') |
| | | }, |
| | | close () { |
| | | this.$emit('close') |
| | | this.$emit('update:visible', false) |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import QueryForm from './queryForm.vue' |
| | | |
| | | export default QueryForm |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="doumee-filter"> |
| | | <el-form inline label-suffix="ï¼" @submit.native.prevent> |
| | | <template v-for="(item, index) in queryFormConfig.formItems"> |
| | | <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label"> |
| | | <el-input v-model="searchForm[item.filed]" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :placeholder="item.placeholder ? item.placeholder : '请è¾å
¥' + item.label" class="w200" |
| | | @change="changeForm(item.filed)" @keyup.enter.native="handlekeyup(item.keyup || false)" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label" |
| | | :label="item.label"> |
| | | <el-input v-model="searchForm[item.filedStrt]" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :placeholder="item.start" style="width: 150px" /> |
| | | <div class="date-division-line" style="margin-left: 10px;margin-bottom: 0;">~</div> |
| | | <el-input v-model="searchForm[item.filedEnd]" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :placeholder="item.end" style="width: 150px" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label"> |
| | | <el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :placeholder="item.placeholder ? item.placeholder : 'è¯·éæ©' + item.label" class="w200" |
| | | @change="changeForm(item.filed)"> |
| | | <el-option v-for="opt, i in item.options" :key="i" :value="item.valueCode ? opt[item.valueCode] : opt.value" |
| | | :label="item.labelCode ? opt[item.labelCode] : opt.label" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label || 'æ¥æ'"> |
| | | <el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :placeholder="item.placeholder || 'è¯·éæ©æ¥æ'" :picker-options="item.pickerOptions || {}" |
| | | @change="changeForm(item.filed)" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label || ''"> |
| | | <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange" |
| | | range-separator="è³" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :start-placeholder="item.start || ''" :end-placeholder="item.end || ''" |
| | | :picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label || 'éæ©æ¶é´'"> |
| | | <el-time-picker v-model="searchForm[item.filed]" is-range range-separator="è³" format="HH:mm" |
| | | value-format="HH:mm" start-placeholder="å¼å§æ¶é´" end-placeholder="ç»ææ¶é´" placeholder="éæ©æ¶é´èå´" class="w400" |
| | | @change="changeForm(item.filed)" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label || 'éæ©æ¥æ'"> |
| | | <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" |
| | | :picker-options="item.pickerOptions || pickerOptions" range-separator="è³" |
| | | :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" |
| | | :start-placeholder="item.start || 'å¼å§æ¶é´'" :end-placeholder="item.end || 'ç»ææ¶é´'" class="w400" |
| | | @change="changeForm(item.filed)" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed" |
| | | :label="item.label"> |
| | | <slot :name="item.filed" /> |
| | | </el-form-item> |
| | | </template> |
| | | <!-- æä½ --> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleQuery">æç´¢</el-button> |
| | | <el-button v-if="showQk" @click="clear">éç½®</el-button> |
| | | <slot name="btns" /> |
| | | <template v-if="queryFormConfig.formItems.length > listLength"> |
| | | <el-button v-if="!showZk" type="text" @click="zkBtn">å±å¼<i |
| | | class="el-icon-caret-bottom primaryColor" /></el-button> |
| | | <el-button v-if="showZk" type="text" @click="zkBtn">æ¶èµ·<i class="el-icon-caret-top primaryColor" /></el-button> |
| | | </template> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | value: { |
| | | type: Object, |
| | | default: () => { } |
| | | }, |
| | | showQk: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | listLength: { |
| | | type: Number, |
| | | default: 3 |
| | | }, |
| | | queryFormConfig: { |
| | | type: Object, |
| | | default: () => { } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | showZk: false, |
| | | pickerOptions: { |
| | | shortcuts: [{ |
| | | text: 'è¿7天', |
| | | onClick(picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 6) |
| | | picker.$emit('pick', [start, end]) |
| | | } |
| | | }, |
| | | { |
| | | text: 'è¿30天', |
| | | onClick(picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 29) |
| | | picker.$emit('pick', [start, end]) |
| | | } |
| | | }, |
| | | { |
| | | text: 'è¿60天', |
| | | onClick(picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 59) |
| | | picker.$emit('pick', [start, end]) |
| | | } |
| | | }, |
| | | { |
| | | text: 'è¿90天', |
| | | onClick(picker) { |
| | | const end = new Date() |
| | | const start = new Date() |
| | | start.setTime(end.getTime() - 3600 * 1000 * 24 * 89) |
| | | picker.$emit('pick', [start, end]) |
| | | } |
| | | }], |
| | | disabledDate(time) { |
| | | var curDate = new Date(new Date().toLocaleDateString()).getTime() |
| | | var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1) |
| | | return time.getTime() > preDate |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | emits: ['input', 'handleQuery', 'clear'], |
| | | computed: { |
| | | searchForm: { |
| | | get() { |
| | | return this.value |
| | | }, |
| | | set(value) { |
| | | this.$emit('input', value) |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleQuery() { |
| | | this.$emit('handleQuery') |
| | | }, |
| | | handlekeyup(pd) { |
| | | if (pd) { |
| | | this.$emit('handleQuery') |
| | | } |
| | | }, |
| | | changeForm(filed) { |
| | | this.$emit('changeForm', filed) |
| | | }, |
| | | zkBtn() { |
| | | this.showZk = !this.showZk |
| | | this.$emit('zkBtn', this.zk) |
| | | }, |
| | | clear() { |
| | | this.$emit('clear') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .doumee-filter { |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | flex-wrap: wrap; |
| | | align-items: center; |
| | | background-color: #fff; |
| | | border-bottom: 10px solid #f7f8f9; |
| | | margin: 0 -30px; |
| | | padding: 0 0 0 30px; |
| | | |
| | | .el-input, |
| | | .el-select { |
| | | width: 200px; |
| | | margin-right: 20px; |
| | | margin-bottom: 20px; |
| | | height: 36px; |
| | | |
| | | .el-input__inner { |
| | | /* color: $textColor; */ |
| | | padding: 0 16px; |
| | | } |
| | | } |
| | | |
| | | .el-date-editor { |
| | | width: 200px; |
| | | margin-right: 20px; |
| | | margin-bottom: 20px; |
| | | |
| | | .el-input__inner { |
| | | padding-left: 30px; |
| | | } |
| | | } |
| | | |
| | | .el-button { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 20px; |
| | | margin-right: 20px; |
| | | |
| | | .el-input, |
| | | .el-select, |
| | | .el-date-editor { |
| | | margin-right: 0; |
| | | } |
| | | |
| | | .el-input, |
| | | .el-select, |
| | | .el-date-editor, |
| | | .el-button { |
| | | margin-bottom: 0; |
| | | } |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <div class="one_level" v-for="(menu, i) in dataList" :key="i"> |
| | | <div class="title"> |
| | | {{ menu.name }} |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item" @click="handleClick(item)" v-for="item in menu.children" :key="item.name"> |
| | | <img src="" alt="" class="icon" /> |
| | | <div class="name">{{ item.name }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data () { |
| | | return { |
| | | dataList: [ |
| | | { |
| | | name: 'ä¸å¡ä¸å¿', |
| | | children: [ |
| | | { name: 'ç¨è½¦ç³è¯·è®°å½', url: '' }, |
| | | { name: 'ä¼è®®å®¤é¢çº¦è®°å½', url: '' }, |
| | | { name: 'éæ£éææè®°å½', url: '' }, |
| | | { name: 'ç¨é¤è®°å½', url: '' }, |
| | | { name: 'dddd', url: '' } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'æå°ä¸å¿', |
| | | children: [ |
| | | { name: 'ç¨è½¦ç³è¯·è®°å½', url: '' }, |
| | | { name: 'ä¼è®®å®¤é¢çº¦è®°å½', url: '' }, |
| | | { name: 'éæ£éææè®°å½', url: '' }, |
| | | { name: 'ç¨é¤è®°å½', url: '' }, |
| | | { name: 'dddd', url: '' } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | handleClick (item) { |
| | | console.log(item) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .one_level { |
| | | padding: 16px 0; |
| | | .title { |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | border-bottom: 1px solid #cccccc; |
| | | padding: 12px 16px; |
| | | margin-bottom: 20px; |
| | | } |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | .item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | width: 25%; |
| | | .icon { |
| | | width: 60px; |
| | | height: 60px; |
| | | margin-right: 12px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <TableLayout> |
| | | <template v-slot:table-wrap> |
| | | <el-tabs v-model="activeName"> |
| | | <el-tab-pane label="æ®é访客" name="first"></el-tab-pane> |
| | | <el-tab-pane label="æ½å·¥è®¿å®¢" name="second"></el-tab-pane> |
| | | </el-tabs> |
| | | <div class="config"> |
| | | <div class="config_list"> |
| | | <div class="config_list_head"> |
| | | <span>é
ç½®æµç¨</span> |
| | | <el-button style="background: #435EBE;" type="primary">åå¸</el-button> |
| | | <el-button style="background: #435ebe" type="primary" |
| | | >åå¸</el-button |
| | | > |
| | | </div> |
| | | <div class="config_list_list"> |
| | | <div class="item"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div :class="item.active ? 'item yellow active' : 'item yellow'" v-for="(item, index) in list" :key="index" @click="seleItem(index)"> |
| | | <div |
| | | :class="item.active ? 'item yellow active' : 'item yellow'" |
| | | v-for="(item, index) in list" |
| | | :key="index" |
| | | @click="seleItem(index)" |
| | | > |
| | | <div class="item_label">审æ¹äºº</div> |
| | | <div class="item_child" style="cursor: pointer;"> |
| | | <img class="item_child_right" src="@/assets/images/ar_more@2x.png" /> |
| | | <div class="item_child" style="cursor: pointer"> |
| | | <img |
| | | class="item_child_right" |
| | | src="@/assets/images/ar_more@2x.png" |
| | | /> |
| | | <div class="item_child_label">被访人</div> |
| | | <div class="item_child_val">访客</div> |
| | | </div> |
| | | <div class="item_down"> |
| | | <img class="item_down_add" v-if="list.length - 1 === index" src="@/assets/images/peizhi_add@2x.png" @click.stop="add" /> |
| | | <!-- <img |
| | | class="item_down_add" |
| | | v-if="list.length - 1 === index" |
| | | src="@/assets/images/peizhi_add@2x.png" |
| | | @click.stop="add" |
| | | /> --> |
| | | <div class="item_down_x"> |
| | | <img src="@/assets/images/peizhi_ar@2x.png" alt="" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="item blue" style="height: 81px;"> |
| | | <div class="item blue" style="height: 81px"> |
| | | <div class="item_label">æé人</div> |
| | | <div class="item_child" style="cursor: pointer;height: 40px;"> |
| | | <img class="item_child_right" src="@/assets/images/ar_more@2x.png" /> |
| | | <div class="item_child_val" style="margin-top: 3px;">请设置æé人</div> |
| | | <div class="item_child" style="cursor: pointer; height: 40px"> |
| | | <img |
| | | class="item_child_right" |
| | | src="@/assets/images/ar_more@2x.png" |
| | | /> |
| | | <div class="item_child_val" style="margin-top: 3px"> |
| | | 请设置æé人 |
| | | </div> |
| | | </div> |
| | | <div class="item_down"> |
| | | <div class="item_down_x"> |
| | |
| | | </div> |
| | | <div class="config_data"> |
| | | <div class="config_data_item"> |
| | | <div class="config_data_item_label"> |
| | | éæ©è¯¥èç¹ç审æ¹äºº |
| | | </div> |
| | | <div class="config_data_item_label">éæ©è¯¥èç¹ç审æ¹äºº</div> |
| | | <el-radio-group v-model="radio"> |
| | | <el-radio :label="0">被访人</el-radio> |
| | | <el-radio :label="1">æå®äººå</el-radio> |
| | |
| | | <span>æ åå¥</span> |
| | | <i class="el-icon-close"></i> |
| | | </div> |
| | | <span class="add">+æ·»å </span> |
| | | <span class="add" @click="selStaff">+æ·»å </span> |
| | | </div> |
| | | </div> |
| | | <div class="config_data_item_reviewed" v-if="radio === 2"> |
| | |
| | | </div> |
| | | <div class="config_data_item_reviewed_r"> |
| | | <span>被访人ç</span> |
| | | <el-select v-model="value" placeholder="è¯·éæ©" style="margin: 0 20px 0 10px;"> |
| | | <el-select |
| | | v-model="value" |
| | | placeholder="è¯·éæ©" |
| | | style="margin: 0 20px 0 10px" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-checkbox v-model="checked">æ¾ä¸å°ä¸»ç®¡æ¶ï¼ç±ä¸çº§ä¸»ç®¡ä»£å®¡æ ¸</el-checkbox> |
| | | <el-checkbox v-model="checked" |
| | | >æ¾ä¸å°ä¸»ç®¡æ¶ï¼ç±ä¸çº§ä¸»ç®¡ä»£å®¡æ ¸</el-checkbox |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | å®¡æ¹æ¹å¼ |
| | | <span>审æ¹äººä¸ºå¤ä¸ªæ¶ï¼éç¨çå®¡æ¹æ¹å¼</span> |
| | | </div> |
| | | <el-radio-group v-model="radio1" style="display: flex; flex-direction: column;"> |
| | | <el-radio :label="0" style="margin-bottom: 20px;">æç¾ï¼å
¶ä¸ä¸å审æ¹äººåæææç»å³å¯ï¼</el-radio> |
| | | <el-radio-group |
| | | v-model="radio1" |
| | | style="display: flex; flex-direction: column" |
| | | > |
| | | <el-radio :label="0" style="margin-bottom: 20px" |
| | | >æç¾ï¼å
¶ä¸ä¸å审æ¹äººåæææç»å³å¯ï¼</el-radio |
| | | > |
| | | <el-radio :label="1">ä¼ç¾ï¼ææå®¡æ¹äººé½åææå¯éè¿ï¼</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="config_data_item" v-if="radio === 2"> |
| | | <div class="config_data_item_label"> |
| | | 审æ¹äººä¸ºç©ºæ¶ |
| | | </div> |
| | | <el-checkbox-group v-model="checkList" style="display: flex; flex-direction: column;"> |
| | | <el-checkbox label="å¤éæ¡ A" style="margin-bottom: 20px;"></el-checkbox> |
| | | <el-checkbox label="å¤éæ¡ B" style="margin-bottom: 20px;"></el-checkbox> |
| | | <div class="config_data_item_label">审æ¹äººä¸ºç©ºæ¶</div> |
| | | <el-checkbox-group |
| | | v-model="checkList" |
| | | style="display: flex; flex-direction: column" |
| | | > |
| | | <el-checkbox |
| | | label="å¤éæ¡ A" |
| | | style="margin-bottom: 20px" |
| | | ></el-checkbox> |
| | | <el-checkbox |
| | | label="å¤éæ¡ B" |
| | | style="margin-bottom: 20px" |
| | | ></el-checkbox> |
| | | <el-checkbox label="å¤éæ¡ C"></el-checkbox> |
| | | </el-checkbox-group> |
| | | </div> |
| | | <div class="config_data_submit" v-if="radio !== 0"> |
| | | <el-button style="background: #435EBE;" type="primary">ä¿æé
置项</el-button> |
| | | <el-button style="background: #435ebe" type="primary" |
| | | >ä¿æé
置项</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <!-- --> |
| | | <el-dialog title="éæ©åå·¥" :visible.sync="isShowTransfer" width="800px"> |
| | | <tree-transfer |
| | | v-model="param.menuIds" |
| | | :title="['æªé', 'å·²é']" |
| | | :from_data="fromData" |
| | | :to_data="selData" |
| | | :defaultProps="{ label: 'label' }" |
| | | mode="transfer" |
| | | height="500px" |
| | | filter |
| | | openAll |
| | | ref="treeTransfer" |
| | | > |
| | | </tree-transfer> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowTransfer = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="isShowTransfer = false" |
| | | >ç¡® å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import treeTransfer from 'el-tree-transfer' |
| | | export default { |
| | | name: 'config', |
| | | components: { TableLayout }, |
| | | components: { |
| | | TableLayout, |
| | | treeTransfer |
| | | }, |
| | | data () { |
| | | return { |
| | | list: [ |
| | |
| | | radio: 0, |
| | | radio1: 0, |
| | | checked: '', |
| | | checkList: [] |
| | | checkList: [], |
| | | |
| | | param: {}, |
| | | activeName: 'first', |
| | | isShowTransfer: false, |
| | | fromData: [ |
| | | { |
| | | id: '1', |
| | | pid: 0, |
| | | label: 'ä¸çº§ 1', |
| | | children: [ |
| | | { |
| | | id: '1-1', |
| | | pid: '1', |
| | | label: 'äºçº§ 1-1', |
| | | disabled: true, |
| | | children: [] |
| | | }, |
| | | { |
| | | id: '1-2', |
| | | pid: '1', |
| | | label: 'äºçº§ 1-2', |
| | | children: [ |
| | | { |
| | | id: '1-2-1', |
| | | pid: '1-2', |
| | | children: [], |
| | | label: 'äºçº§ 1-2-1' |
| | | }, |
| | | { |
| | | id: '1-2-2', |
| | | pid: '1-2', |
| | | children: [], |
| | | label: 'äºçº§ 1-2-2' |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | selData: [] |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | name: '', |
| | | active: false |
| | | }) |
| | | }, |
| | | selStaff() { |
| | | this.isShowTransfer = true |
| | | }, |
| | | seleItem (i) { |
| | | this.list.forEach((item, index) => { |
| | |
| | | border-radius: 2px; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | border: 1px solid #EEEEEE; |
| | | background: #F7F7F7; |
| | | border: 1px solid #eeeeee; |
| | | background: #f7f7f7; |
| | | .config_list_head { |
| | | width: 100%; |
| | | height: 40px; |
| | |
| | | width: 0; |
| | | } |
| | | .active { |
| | | border: 2px solid #E84A08 !important; |
| | | border: 2px solid #e84a08 !important; |
| | | } |
| | | .yellow { |
| | | background: #EE8921 !important; |
| | | background: #ee8921 !important; |
| | | } |
| | | .blue { |
| | | background: #435EBE !important; |
| | | background: #435ebe !important; |
| | | } |
| | | .footer { |
| | | width: 106px; |
| | | height: 41px; |
| | | background: #FFFFFF; |
| | | background: #ffffff; |
| | | box-shadow: 0px 0px 8px 0px rgba(0,0,0,0.1); |
| | | border-radius: 25px; |
| | | display: flex; |
| | |
| | | .item { |
| | | width: 200px; |
| | | height: 102px; |
| | | background: #7999D9; |
| | | background: #7999d9; |
| | | box-shadow: 0 0 8px 0 rgba(0,0,0,0.1); |
| | | border-radius: 4px; |
| | | padding: 4px; |
| | |
| | | .item_down_x { |
| | | width: 1px; |
| | | height: 60px; |
| | | background: #B2B2B2; |
| | | background: #b2b2b2; |
| | | position: relative; |
| | | img { |
| | | position: absolute; |
| | |
| | | align-items: center; |
| | | font-size: 15px; |
| | | font-weight: 400; |
| | | color: #FFFFFF; |
| | | color: #ffffff; |
| | | } |
| | | .item_child { |
| | | width: 100%; |
| | | height: 61px; |
| | | padding: 10px; |
| | | box-sizing: border-box; |
| | | background: #FFFFFF; |
| | | background: #ffffff; |
| | | border-radius: 4px; |
| | | position: relative; |
| | | .item_child_right { |
| | |
| | | padding: 12px; |
| | | box-sizing: border-box; |
| | | border-radius: 2px; |
| | | border: 1px solid #DFE2E8; |
| | | border: 1px solid #dfe2e8; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | flex-wrap: wrap; |
| | | .add { |
| | | font-size: 12px; |
| | | font-weight: 400; |
| | | color: #435EBE; |
| | | color: #435ebe; |
| | | cursor: pointer; |
| | | margin-top: 3px; |
| | | } |
| | | .config_data_item_reviewed_content_item { |
| | | padding: 3px 5px; |
| | | background: #F4F7FC; |
| | | background: #f4f7fc; |
| | | border-radius: 2px; |
| | | box-sizing: border-box; |
| | | margin-right: 10px; |
| | |
| | | color: #333333; |
| | | } |
| | | i { |
| | | color: #949BA2; |
| | | color: #949ba2; |
| | | margin-left: 10px; |
| | | cursor: pointer; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | text="åæ" |
| | | backText="æç»" |
| | | :visible.sync="isShowModal" |
| | | @confirm="confirm" |
| | | @close="reject" |
| | | > |
| | | <div class="modal_wrap"> |
| | | <div class="modal_content"> |
| | | <div class="header"> |
| | | <div class="left"> |
| | | <div class="h1">访客é¢çº¦</div> |
| | | <div class="time">æäº¤æ¶é´ï¼</div> |
| | | </div> |
| | | <div class="right">å¾
å®¡æ ¸</div> |
| | | </div> |
| | | <div class="info"> |
| | | <div class="title">访客æ¥å¤è¯¦æ
</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="label">被访人</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æè®¿æ¶é´</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">å
¥å车è¾</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿åä½</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">è系人</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">é车人æ°</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿äºç±</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="table_info"> |
| | | <div class="title">访客信æ¯</div> |
| | | <el-table :data="detail.datalist" border fit> |
| | | <el-table-column label="å§å" prop="" min-width="150"> |
| | | <template slot-scope="{ row }"> |
| | | <div class="name_wrap"> |
| | | <image src="" class="avatar" mode="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">æä¸</div> |
| | | <div class="tag">ç³è¯·äºº</div> |
| | | </div> |
| | | <div class="line placeholder9">1888888</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ§å«" prop="" min-width="40" /> |
| | | <el-table-column label="è¯ä»¶ç±»å" prop="" min-width="80" /> |
| | | <el-table-column label="è¯ä»¶å·ç " prop="" min-width="120" /> |
| | | <el-table-column label="å
¬å¸åç§°" prop="" min-width="120" /> |
| | | <el-table-column label="人è¸ç
§ç" prop="" min-width="80"> |
| | | <template slot-scope="{ row }"> |
| | | <el-image :src="row.url" :preview-src-list="[row.url]"> |
| | | </el-image> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="side"> |
| | | <div class="side_title">å®¡æ¹æµç¨</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="separate"></div> |
| | | <div class="info"> |
| | | <i class="el-icon-success icon"></i> |
| | | <img src="" class="avatar" alt="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">åæåæ</div> |
| | | <div class="time">2020-02-02 12:20</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="company">ä¸å½ç§»å¨æéå
¬å¸</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <!-- <div v-if="" class="separate"></div> --> |
| | | <div class="info"> |
| | | <i class="el-icon-success icon"></i> |
| | | <img src="" class="avatar" alt="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">åæåæ</div> |
| | | <div class="time">2020-02-02 12:20</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="company"> |
| | | ä¸å½ç§»å¨æéå
¬å¸( <span class="status">å·²åæ</span> ) |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="remark">æäº¤çº¦å¥½ç</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- --> |
| | | <template #btns> |
| | | <el-button type="primary" plain @click="handleTransfer">转交</el-button> |
| | | </template> |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | :title="apprTitle" |
| | | :visible.sync="isShowAppr" |
| | | width="480px" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | :placeholder="apprTitle + '说æï¼éå¿
å¡«'" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowAppr = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowAppr = false">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 鿣 --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="鿣" |
| | | :visible.sync="isShowProblem" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px"> |
| | | <el-form-item label="éåæ¶é´"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="param.date" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å"> |
| | | <div class="df_ac"> |
| | | <img src="@/assets/avatar/man.png" /> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="https://jsonplaceholder.typicode.com/posts/" |
| | | :show-file-list="false" |
| | | :on-success="handleAvatarSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="éå说æ"> |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowProblem = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowProblem = false" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | export default { |
| | | components: { GlobalWindow }, |
| | | data() { |
| | | return { |
| | | title: '访客é¢çº¦è¯¦æ
', |
| | | isShowModal: false, |
| | | detail: { |
| | | datalist: [{}] |
| | | }, |
| | | |
| | | isShowAppr: false, |
| | | apprTitle: 'åæ', |
| | | param: {}, |
| | | |
| | | isShowProblem: false, |
| | | rules: {} |
| | | } |
| | | }, |
| | | methods: { |
| | | confirm() { |
| | | console.log('--') |
| | | }, |
| | | handleTransfer() { |
| | | this.isShowProblem = true |
| | | }, |
| | | reject() { }, |
| | | handleAvatarSuccess() { }, |
| | | beforeAvatarUpload() { } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .upload_box { |
| | | width: 84px; |
| | | height: 84px; |
| | | border-radius: 4px; |
| | | background-color: #f7f7f7; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | color: #999999; |
| | | border: 1px solid #e4e4e4; |
| | | .icon { |
| | | font-size: 24px; |
| | | } |
| | | .text { |
| | | font-size: 12px; |
| | | } |
| | | } |
| | | .modal_wrap { |
| | | display: flex; |
| | | height: 100%; |
| | | .modal_content { |
| | | flex: 1; |
| | | padding: 0px 30px; |
| | | border-radius: 8px; |
| | | overflow: hidden; |
| | | height: 100%; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 18px; |
| | | color: #333333; |
| | | margin-bottom: 20px; |
| | | margin-top: 30px; |
| | | } |
| | | |
| | | .info { |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .item { |
| | | display: flex; |
| | | width: 40%; |
| | | margin-bottom: 20px; |
| | | &:nth-of-type(2n) { |
| | | width: 60%; |
| | | } |
| | | |
| | | .label { |
| | | color: #888888; |
| | | width: 68px; |
| | | } |
| | | |
| | | .value { |
| | | color: #111111; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding: 20px 30px; |
| | | margin: 0 -30px; |
| | | border-radius: 8px 8px 0 0; |
| | | background: linear-gradient(to right, #f2f6fe, #cadffa); |
| | | |
| | | .h1 { |
| | | font-weight: 600; |
| | | font-size: 22px; |
| | | color: #111111; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .time { |
| | | font-size: 14px; |
| | | color: #999999; |
| | | } |
| | | |
| | | .right { |
| | | height: 40px; |
| | | font-size: 16px; |
| | | color: #ffffff; |
| | | line-height: 40px; |
| | | padding: 0 20px; |
| | | background: #207ff7; |
| | | box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16); |
| | | border-radius: 16px 0px 16px 0px; |
| | | } |
| | | } |
| | | .table_info { |
| | | .name_wrap { |
| | | display: flex; |
| | | align-items: center; |
| | | .avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 50%; |
| | | margin-right: 12px; |
| | | } |
| | | .content { |
| | | .line { |
| | | display: flex; |
| | | } |
| | | .tag { |
| | | color: #b2cbf9; |
| | | border: 1px solid #b2cbf9; |
| | | padding: 0px 4px; |
| | | border-radius: 4px; |
| | | margin-left: 6px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .side { |
| | | height: 100%; |
| | | width: 420px; |
| | | background: #ffffff; |
| | | border-left: 20px solid #f7f7f7; |
| | | .list { |
| | | .item { |
| | | padding: 8px 0; |
| | | position: relative; |
| | | .separate { |
| | | position: absolute; |
| | | border-left: 2px dashed #cccccc; |
| | | left: 51px; |
| | | height: calc(100% - 24px); |
| | | top: 46px; |
| | | } |
| | | .info { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-left: 40px; |
| | | .icon { |
| | | position: relative; |
| | | z-index: 11; |
| | | color: #53b76f; |
| | | font-size: 24px; |
| | | } |
| | | .avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 50%; |
| | | margin: 0 12px 0 16px; |
| | | border: 1px solid; |
| | | } |
| | | .content { |
| | | flex: 1; |
| | | .line { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-content: center; |
| | | margin-bottom: 6px; |
| | | .name { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #111111; |
| | | } |
| | | .time { |
| | | color: #888888; |
| | | } |
| | | .company { |
| | | font-size: 13px; |
| | | color: #888888; |
| | | .status { |
| | | color: #00ba67; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .remark { |
| | | background: #f7f7f7; |
| | | border-radius: 4px; |
| | | padding: 13px 15px; |
| | | color: #666666; |
| | | margin-left: 120px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <el-table v-loading="loading" :data="list" stripe row-key="id" default-expand-all> |
| | | <el-table-column prop="" label="å
¥å车è¾" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="å
¬å¸åç§°" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="è系人信æ¯" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="ææºå·" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="被访人" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="æè®¿æ¶é´" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="æè®¿äºç±" min-width="80" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" fixed="right" label="ç¶æ" min-width="100"></el-table-column> |
| | | <el-table-column label="æä½" width="230" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">æ¥ç详æ
</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | <ReportDetail v-if="isShowDetail" ref="DetailRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import ReportDetail from './page-components/ReportDetail.vue' |
| | | export default { |
| | | components: { |
| | | ReportDetail, |
| | | QueryForm, |
| | | Pagination |
| | | }, |
| | | data () { |
| | | return { |
| | | isShowDetail: false, |
| | | activeTab: '0', |
| | | filters: {}, |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'idCard', |
| | | type: 'input', |
| | | label: '车çå·' |
| | | }, |
| | | { |
| | | filed: 'name', |
| | | type: 'input', |
| | | label: 'å
¬å¸åç§°' |
| | | } |
| | | ], |
| | | online: true |
| | | }, |
| | | loading: false, |
| | | sorting: false, |
| | | searchForm: { |
| | | // type: 1 |
| | | }, |
| | | pagination: { |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | list: [{}], |
| | | total: 0 |
| | | } |
| | | }, |
| | | methods: { |
| | | handleDetail () { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DetailRef.isShowModal = true |
| | | }) |
| | | }, |
| | | getList (page) {}, |
| | | clear () { }, |
| | | handleSizeChange (capacity) { |
| | | this.pagination.capacity = capacity |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <div class="table_btns"> |
| | | <el-button icon="el-icon-plus" @click="handleEdit()" type="primary" |
| | | >æ°å»º</el-button |
| | | > |
| | | </div> |
| | | <el-table v-loading="loading" :data="list" stripe> |
| | | <el-table-column |
| | | prop="name" |
| | | label="æè®¿äºç±" |
| | | min-width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | label="æåºç " |
| | | min-width="80" |
| | | ></el-table-column> |
| | | <el-table-column label="æä½" width="230" fixed="right"> |
| | | <!-- v-permissions="['business:company:update']" --> |
| | | <template slot-scope="{ row }"> |
| | | <el-button type="text" icon="el-icon-edit" @click="handleEdit(row)" |
| | | >ç¼è¾</el-button |
| | | > |
| | | <el-button |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDetail(row)" |
| | | class="red" |
| | | >å é¤</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="getList" |
| | | :pagination="pagination" |
| | | /> |
| | | <!-- --> |
| | | <el-dialog title="æè®¿äºç±" :visible.sync="isShowEdit" width="480px"> |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px"> |
| | | <el-form-item label="æè®¿äºç±"> |
| | | <el-input type="text" placeholder="请è¾å
¥" v-model="param.explain" /> |
| | | </el-form-item> |
| | | <el-form-item label="æåºç "> |
| | | <el-input |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" |
| | | v-model="param.sortNum" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowEdit = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="handleSub">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | export default { |
| | | components: { |
| | | Pagination |
| | | }, |
| | | data() { |
| | | return { |
| | | loading: false, |
| | | pagination: { |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | list: [{}], |
| | | total: 0, |
| | | |
| | | isShowEdit: false, |
| | | param: {}, |
| | | rules: {} |
| | | } |
| | | }, |
| | | methods: { |
| | | handleSub() { |
| | | this.$refs.ruleForm.validate((valid) => { |
| | | if (valid) { |
| | | alert('submit!') |
| | | } |
| | | }) |
| | | }, |
| | | handleEdit() { |
| | | this.isShowEdit = true |
| | | }, |
| | | getList(page) { }, |
| | | clear() { }, |
| | | handleSizeChange(capacity) { |
| | | this.pagination.capacity = capacity |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <!-- --> |
| | | <el-tabs v-model="activeTab"> |
| | | <el-tab-pane label="å¾
å¤ç" name="0"></el-tab-pane> |
| | | <el-tab-pane label="å·²å¤ç" name="1"></el-tab-pane> |
| | | <el-tab-pane label="æåèµ·ç" name="2"></el-tab-pane> |
| | | <el-tab-pane label="æéæç" name="3"></el-tab-pane> |
| | | </el-tabs> |
| | | <el-table v-loading="loading" :data="list" stripe row-key="id" default-expand-all> |
| | | <el-table-column prop="name" label="ä»»å¡ç±»å" min-width="100"></el-table-column> |
| | | <el-table-column prop="name" label="æäº¤äºº" min-width="80"></el-table-column> |
| | | <el-table-column prop="companyNamePath" label="æäº¤æ¶é´" min-width="100"></el-table-column> |
| | | <el-table-column label="æä½" width="230" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">æ¥ç详æ
</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | <TaskDetail v-if="isShowDetail" ref="DetailRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import TaskDetail from './taskDetail.vue' |
| | | export default { |
| | | components: { |
| | | TaskDetail, |
| | | QueryForm, |
| | | Pagination |
| | | }, |
| | | data () { |
| | | return { |
| | | isShowDetail: false, |
| | | activeTab: '0', |
| | | filters: {}, |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'taskType', |
| | | type: 'select', |
| | | label: 'ä»»å¡ç±»å', |
| | | options: [] |
| | | }, |
| | | { |
| | | filed: 'status', |
| | | type: 'daterange', |
| | | label: '' |
| | | } |
| | | ], |
| | | online: true |
| | | }, |
| | | loading: false, |
| | | sorting: false, |
| | | searchForm: { |
| | | // type: 1 |
| | | }, |
| | | pagination: { |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | list: [{}], |
| | | total: 0 |
| | | } |
| | | }, |
| | | methods: { |
| | | handleDetail () { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DetailRef.isShowModal = true |
| | | }) |
| | | }, |
| | | getList (page) { }, |
| | | clear () { }, |
| | | handleSizeChange (capacity) { |
| | | this.pagination.capacity = capacity |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | text="åæ" |
| | | backText="æç»" |
| | | :visible.sync="isShowModal" |
| | | @confirm="confirm" |
| | | @close="reject" |
| | | > |
| | | <div class="modal_wrap"> |
| | | <div class="modal_content"> |
| | | <div class="header"> |
| | | <div class="left"> |
| | | <div class="h1">访客é¢çº¦</div> |
| | | <div class="time">æäº¤æ¶é´ï¼</div> |
| | | </div> |
| | | <div class="right">å¾
å®¡æ ¸</div> |
| | | </div> |
| | | <div class="info"> |
| | | <div class="title">访客é¢çº¦ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="label">被访人</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿æ¶é´</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿äºç±</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">éè¡è½¦è¾</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ½å·¥äººå</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ½å·¥å
容</div> |
| | | <div class="value"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="table_info"> |
| | | <div class="title">访客信æ¯</div> |
| | | <el-table :data="detail.datalist" border fit> |
| | | <el-table-column label="å§å" prop="" min-width="150"> |
| | | <template slot-scope="{ row }"> |
| | | <div class="name_wrap"> |
| | | <image src="" class="avatar" mode="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">æä¸</div> |
| | | <div class="tag">ç³è¯·äºº</div> |
| | | </div> |
| | | <div class="line placeholder9">1888888</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ§å«" prop="" min-width="40" /> |
| | | <el-table-column label="è¯ä»¶ç±»å" prop="" min-width="80" /> |
| | | <el-table-column label="è¯ä»¶å·ç " prop="" min-width="120" /> |
| | | <el-table-column label="å
¬å¸åç§°" prop="" min-width="120" /> |
| | | <el-table-column label="人è¸ç
§ç" prop="" min-width="80"> |
| | | <template slot-scope="{ row }"> |
| | | <el-image :src="row.url" :preview-src-list="[row.url]"> </el-image> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="side"> |
| | | <div class="side_title">å®¡æ¹æµç¨</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="separate"></div> |
| | | <div class="info"> |
| | | <i class="el-icon-success icon"></i> |
| | | <img src="" class="avatar" alt="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">åæåæ</div> |
| | | <div class="time">2020-02-02 12:20</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="company">ä¸å½ç§»å¨æéå
¬å¸</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <!-- <div v-if="" class="separate"></div> --> |
| | | <div class="info"> |
| | | <i class="el-icon-success icon"></i> |
| | | <img src="" class="avatar" alt="" /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">åæåæ</div> |
| | | <div class="time">2020-02-02 12:20</div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="company"> |
| | | ä¸å½ç§»å¨æéå
¬å¸( <span class="status">å·²åæ</span> ) |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="remark">æäº¤çº¦å¥½ç</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- --> |
| | | <template #btns> |
| | | <el-button type="primary" plain @click="handleTransfer">转交</el-button> |
| | | </template> |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | :title="apprTitle" |
| | | :visible.sync="isShowAppr" |
| | | width="480px" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | :placeholder="apprTitle + '说æï¼éå¿
å¡«'" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowAppr = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowAppr = false">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 鿣 --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="鿣" |
| | | :visible.sync="isShowProblem" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px"> |
| | | <el-form-item label="éåæ¶é´"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="param.date" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å"> |
| | | <div class="df_ac"> |
| | | <img src="@/assets/avatar/man.png" /> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="https://jsonplaceholder.typicode.com/posts/" |
| | | :show-file-list="false" |
| | | :on-success="handleAvatarSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="éå说æ"> |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowProblem = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowProblem = false" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | export default { |
| | | components: { GlobalWindow }, |
| | | data() { |
| | | return { |
| | | title: '访客é¢çº¦è¯¦æ
', |
| | | isShowModal: false, |
| | | detail: { |
| | | datalist: [{}] |
| | | }, |
| | | |
| | | isShowAppr: false, |
| | | apprTitle: 'åæ', |
| | | param: {}, |
| | | |
| | | isShowProblem: false, |
| | | rules: {} |
| | | } |
| | | }, |
| | | methods: { |
| | | confirm() { |
| | | console.log('--') |
| | | }, |
| | | handleTransfer() { |
| | | this.isShowProblem = true |
| | | }, |
| | | reject() { }, |
| | | handleAvatarSuccess() { }, |
| | | beforeAvatarUpload() { } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .upload_box { |
| | | width: 84px; |
| | | height: 84px; |
| | | border-radius: 4px; |
| | | background-color: #f7f7f7; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | color: #999999; |
| | | border: 1px solid #e4e4e4; |
| | | .icon { |
| | | font-size: 24px; |
| | | } |
| | | .text { |
| | | font-size: 12px; |
| | | } |
| | | } |
| | | .modal_wrap { |
| | | display: flex; |
| | | height: 100%; |
| | | .modal_content { |
| | | flex: 1; |
| | | padding: 0px 30px; |
| | | border-radius: 8px; |
| | | overflow: hidden; |
| | | height: 100%; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 18px; |
| | | color: #333333; |
| | | margin-bottom: 20px; |
| | | margin-top: 30px; |
| | | } |
| | | |
| | | .info { |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .item { |
| | | display: flex; |
| | | width: 40%; |
| | | margin-bottom: 20px; |
| | | &:nth-of-type(2n) { |
| | | width: 60%; |
| | | } |
| | | |
| | | .label { |
| | | color: #888888; |
| | | width: 68px; |
| | | } |
| | | |
| | | .value { |
| | | color: #111111; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding: 20px 30px; |
| | | margin: 0 -30px; |
| | | border-radius: 8px 8px 0 0; |
| | | background: linear-gradient(to right, #f2f6fe, #cadffa); |
| | | |
| | | .h1 { |
| | | font-weight: 600; |
| | | font-size: 22px; |
| | | color: #111111; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .time { |
| | | font-size: 14px; |
| | | color: #999999; |
| | | } |
| | | |
| | | .right { |
| | | height: 40px; |
| | | font-size: 16px; |
| | | color: #ffffff; |
| | | line-height: 40px; |
| | | padding: 0 20px; |
| | | background: #207ff7; |
| | | box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16); |
| | | border-radius: 16px 0px 16px 0px; |
| | | } |
| | | } |
| | | .table_info { |
| | | .name_wrap { |
| | | display: flex; |
| | | align-items: center; |
| | | .avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 50%; |
| | | margin-right: 12px; |
| | | } |
| | | .content { |
| | | .line { |
| | | display: flex; |
| | | } |
| | | .tag { |
| | | color: #b2cbf9; |
| | | border: 1px solid #b2cbf9; |
| | | padding: 0px 4px; |
| | | border-radius: 4px; |
| | | margin-left: 6px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .side { |
| | | height: 100%; |
| | | width: 420px; |
| | | background: #ffffff; |
| | | border-left: 20px solid #f7f7f7; |
| | | .list { |
| | | .item { |
| | | padding: 8px 0; |
| | | position: relative; |
| | | .separate { |
| | | position: absolute; |
| | | border-left: 2px dashed #cccccc; |
| | | left: 51px; |
| | | height: calc(100% - 24px); |
| | | top: 46px; |
| | | } |
| | | .info { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-left: 40px; |
| | | .icon { |
| | | position: relative; |
| | | z-index: 11; |
| | | color: #53b76f; |
| | | font-size: 24px; |
| | | } |
| | | .avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 50%; |
| | | margin: 0 12px 0 16px; |
| | | border: 1px solid; |
| | | } |
| | | .content { |
| | | flex: 1; |
| | | .line { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-content: center; |
| | | margin-bottom: 6px; |
| | | .name { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #111111; |
| | | } |
| | | .time { |
| | | color: #888888; |
| | | } |
| | | .company { |
| | | font-size: 13px; |
| | | color: #888888; |
| | | .status { |
| | | color: #00ba67; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .remark { |
| | | background: #f7f7f7; |
| | | border-radius: 4px; |
| | | padding: 13px 15px; |
| | | color: #666666; |
| | | margin-left: 120px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | // 详ç»é
置请åèhttps://cli.vuejs.org/zh/config/#vue-config-js |
| | | // const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1) |
| | | const path = require('path') |
| | | |
| | | function resolve (dir) { |
| | | return path.join(__dirname, dir) |
| | | } |
| | | module.exports = { |
| | | publicPath: process.env.VUE_APP_CONTEXT_PATH, |
| | | outputDir: 'admin', |
| | |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | configureWebpack: { |
| | | // provide the app's title in webpack's name field, so that |
| | | // it can be accessed in index.html to inject the correct title. |
| | | resolve: { |
| | | alias: { |
| | | '@': resolve('src') |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | margin: 0; |
| | | display: flex; |
| | | } |
| | | |
| | | input{ |
| | | font-size: 30rpx |
| | | } |
| | | textarea { |
| | | box-sizing: border-box; |
| | | background-color: #f7f7f7; |
| | | font-size: 28rpx; |
| | | color: #333333; |
| | | padding: 24rpx; |
| | | // background-color: #f7f7f7; |
| | | font-size: 30rpx !important; |
| | | padding: 0; |
| | | border-radius: 8rpx; |
| | | color: #333333 !important; |
| | | } |
| | | .u-textarea{ |
| | | padding: 0 !important; |
| | | color: #333333 !important; |
| | | } |
| | | |
| | | .df_ac { |
| | |
| | | @PostMapping("/updateById") |
| | | @RequiresPermissions("business:bookings:update") |
| | | public ApiResponse updateById(@RequestBody Bookings bookings) { |
| | | LoginUserInfo user = getLoginUser(null); |
| | | bookings.setCreator(user.getId()); |
| | | bookings.setLoginUserInfo(getLoginUser(null)); |
| | | bookingsService.updateById(bookings); |
| | | return ApiResponse.success(null); |
| | | } |
| | |
| | | package com.doumee.cloud.web; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.config.Jwt.JwtTokenUtil; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.QrCodeUtils; |
| | | import com.doumee.dao.business.model.Bookings; |
| | |
| | | @Api(tags = "2ãé¢å®ä¼è®®ä¸å¡") |
| | | @Trace(exclude = true) |
| | | @RestController |
| | | @RequestMapping("/web/meeting") |
| | | @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/meeting") |
| | | @Slf4j |
| | | public class MeetingApi extends ApiController{ |
| | | public class MeetingApi extends BaseController { |
| | | |
| | | @Autowired |
| | | private BookingsService bookingsService; |
| | |
| | | @ApiOperation(value = "彿ä¼è®®è¡¨", notes = "彿ä¼è®®è¡¨") |
| | | @GetMapping("/monthMeeting") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "String", name = "yearMonth", value = "å¹´æ yyyy-MM", required = true) |
| | | }) |
| | | public ApiResponse<List<MonthDataResponse>> monthDay(@RequestParam String yearMonth) { |
| | | public ApiResponse<List<MonthDataResponse>> monthDay(@RequestParam String yearMonth |
| | | ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | LoginUserInfo user = getLoginUser(token); |
| | | List<String> dataList = DateUtil.getDayByMonth(yearMonth); |
| | | List<MonthDataResponse> monthDataResponseList = new ArrayList<>(); |
| | | List<Bookings> bookings = bookingsService.getMyBookings(getMemberId(),yearMonth); |
| | | List<Bookings> bookings = bookingsService.getMyBookings(user.getId(),yearMonth); |
| | | for (String str:dataList) { |
| | | MonthDataResponse monthDataResponse = new MonthDataResponse(); |
| | | monthDataResponse.setWeekMsg(DateUtil.getWeek(DateUtil.StringToDate(str,"yyyy-MM-dd")).getChineseName()); |
| | |
| | | |
| | | @ApiOperation("æçä¼è®®å表") |
| | | @PostMapping("/myMeetingPage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<IPage<MeetingListResponse>> myMeetingPage(@RequestBody PageWrap<MeetingPageRequest> pageWrap) { |
| | | pageWrap.getModel().setUserId(getMemberId()); |
| | | public ApiResponse<IPage<MeetingListResponse>> myMeetingPage(@RequestBody PageWrap<MeetingPageRequest> pageWrap |
| | | ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | LoginUserInfo user = getLoginUser(token); |
| | | pageWrap.getModel().setUserId(user.getId()); |
| | | IPage<MeetingListResponse> page = bookingsService.getMyMeetingPage(pageWrap); |
| | | return ApiResponse.success("æ¥è¯¢æå",page); |
| | | } |
| | |
| | | @ApiOperation("ä¼è®®è¯¦æ
") |
| | | @GetMapping("/meetingDetail") |
| | | @ApiImplicitParams({ |
| | | // @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®ä¸»é®", required = true), |
| | | }) |
| | | public ApiResponse<MeetingDetailResponse> meetingDetail(@RequestParam Integer id) { |
| | |
| | | } |
| | | |
| | | |
| | | @ApiOperation("è·åä¼è®®å¼é¨äºç»´ç ") |
| | | /* @ApiOperation("è·åä¼è®®å¼é¨äºç»´ç ") |
| | | @GetMapping("/getQrCode") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | |
| | | response.setContentType("image/jpeg"); |
| | | String content =bookingsService.getQrCode(id,memberId); |
| | | QrCodeUtils.encode(content,null, response.getOutputStream(), true); |
| | | } |
| | | }*/ |
| | | |
| | | /* |
| | | @LoginRequired |
| | |
| | | |
| | | @ApiOperation("ä¼è®®é¢çº¦") |
| | | @PostMapping("/reservationMeeting") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<Integer> reservationMeeting(@RequestBody BookingsRequest bookingsRequest) { |
| | | bookingsRequest.setCreator(getMemberId()); |
| | | bookingsRequest.setEditor(getMemberId()); |
| | | public ApiResponse<Integer> reservationMeeting(@RequestBody BookingsRequest bookingsRequest ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | LoginUserInfo user = getLoginUser(token); |
| | | bookingsRequest.setCreator(user.getId()); |
| | | bookingsRequest.setEditor(user.getId()); |
| | | return ApiResponse.success("æä½æå",bookingsService.reservationMeeting(bookingsRequest)); |
| | | } |
| | | |
| | | @ApiOperation("åæ¶ä¼è®®é¢çº¦") |
| | | @GetMapping("/reservationCancel") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®ä¸»é®", required = true), |
| | | }) |
| | | public ApiResponse reservationCancel(@RequestParam Integer id) { |
| | | bookingsService.reservationCancel(id,getMemberId()); |
| | | public ApiResponse reservationCancel(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | LoginUserInfo user = getLoginUser(token); |
| | | bookingsService.reservationCancel(id,user.getId()); |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | |
| | | package com.doumee.cloud.web; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | |
| | | @Api(tags = "æ¶æ¯éç¥ä¿¡ä¸å¡") |
| | | @Trace(exclude = true) |
| | | @RestController |
| | | @RequestMapping("/web/notice") |
| | | @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/notice") |
| | | @Slf4j |
| | | public class NoticeApi extends ApiController{ |
| | | public class NoticeApi extends BaseController { |
| | | |
| | | @Autowired |
| | | private NoticesService noticeService; |
| | |
| | | */ |
| | | @ApiOperation(value = "æ¥è¯¢ç¨æ·éç¥", notes = "å°ç¨åºç«¯") |
| | | @PostMapping("/findNoticePage") |
| | | public ApiResponse<PageData<Notices>> findNoticePage(@RequestBody PageWrap<Notices> pageWrap){ |
| | | pageWrap.getModel().setUserId(getMemberId()); |
| | | public ApiResponse<PageData<Notices>> findNoticePage(@RequestBody PageWrap<Notices> pageWrap |
| | | ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | LoginUserInfo user = getLoginUser(token); |
| | | pageWrap.getModel().setUserId(user.getId()); |
| | | return ApiResponse.success("æ¥è¯¢æå",noticeService.findPage(pageWrap)); |
| | | } |
| | | |
| | |
| | | package com.doumee.cloud.web; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.config.Jwt.JwtTokenUtil; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.QrCodeUtils; |
| | | import com.doumee.dao.business.model.RoomTime; |
| | | import com.doumee.dao.web.request.RoomTimeRequest; |
| | |
| | | @Api(tags = "3ãä¼è®®å®¤ä¸å¡") |
| | | @Trace(exclude = true) |
| | | @RestController |
| | | @RequestMapping("/web/rooms") |
| | | @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/rooms") |
| | | @Slf4j |
| | | public class RoomsApi extends ApiController{ |
| | | public class RoomsApi extends BaseController { |
| | | |
| | | @Autowired |
| | | private RoomsService roomsService; |
| | |
| | | @Autowired |
| | | private RoomTimeService roomTimeService; |
| | | |
| | | @ApiOperation("è·åä¼è®®å®¤å¼é¨äºç»´ç ") |
| | | @GetMapping("/getQrCode") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®å®¤ä¸»é®", required = true), |
| | | }) |
| | | public ApiResponse<String> getQrCode(@RequestParam Integer id) { |
| | | return ApiResponse.success("æ¥è¯¢æå", roomsService.getQrCode(id,getMemberId())); |
| | | } |
| | | // @ApiOperation("è·åä¼è®®å®¤å¼é¨äºç»´ç ") |
| | | // @GetMapping("/getQrCode") |
| | | // @ApiImplicitParams({ |
| | | // @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | // @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®å®¤ä¸»é®", required = true), |
| | | // }) |
| | | // public ApiResponse<String> getQrCode(@RequestParam Integer id) { |
| | | // return ApiResponse.success("æ¥è¯¢æå", roomsService.getQrCode(id,getMemberId())); |
| | | // } |
| | | |
| | | @ApiOperation("è·åä¼è®®å®¤å¼é¨äºç»´ç -å¾çæµ") |
| | | @GetMapping("/getQrCodeImg") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®å®¤ä¸»é®", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws Exception { |
| | | Integer memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId(); |
| | | response.setHeader("Cache-Control", "no-store, no-cache"); |
| | | response.setContentType("image/jpeg"); |
| | | String content =roomsService.getQrCode(id,memberId); |
| | | QrCodeUtils.encode(content,null, response.getOutputStream(), true); |
| | | } |
| | | // @ApiOperation("è·åä¼è®®å®¤å¼é¨äºç»´ç -å¾çæµ") |
| | | // @GetMapping("/getQrCodeImg") |
| | | // @ApiImplicitParams({ |
| | | // @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "ä¼è®®å®¤ä¸»é®", required = true), |
| | | // @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | // }) |
| | | // public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws Exception { |
| | | // Integer memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId(); |
| | | // response.setHeader("Cache-Control", "no-store, no-cache"); |
| | | // response.setContentType("image/jpeg"); |
| | | // String content =roomsService.getQrCode(id,memberId); |
| | | // QrCodeUtils.encode(content,null, response.getOutputStream(), true); |
| | | // } |
| | | |
| | | |
| | | @ApiOperation("ä¼è®®å®¤å表") |
| | | @GetMapping("/roomsList") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<List<RoomsResponse>> roomsList() { |
| | | public ApiResponse<List<RoomsResponse>> roomsList(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | return ApiResponse.success("æ¥è¯¢æå",roomsService.getRoomsList()); |
| | | } |
| | | |
| | | |
| | | @ApiOperation("ä¼è®®å®¤æ¶é´å¼æ¾å表") |
| | | @PostMapping("/getRoomUseTime") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<List<RoomTime>> getRoomUseTime(@RequestBody RoomTimeRequest roomTimeRequest) { |
| | | public ApiResponse<List<RoomTime>> getRoomUseTime(@RequestBody RoomTimeRequest roomTimeRequest,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | return ApiResponse.success("æ¥è¯¢æå",roomTimeService.getRoomUseTime(roomTimeRequest)); |
| | | } |
| | | |
| | | @ApiOperation("æçä¼è®®å®¤å表") |
| | | @PostMapping("/myRoomsPage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<IPage<RoomsResponse>> myRoomsPage(@RequestBody PageWrap<RoomsRequest> pageWrap) { |
| | | pageWrap.getModel().setUserId(getMemberId()); |
| | | public ApiResponse<IPage<RoomsResponse>> myRoomsPage(@RequestBody PageWrap<RoomsRequest> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | LoginUserInfo user = getLoginUser(token); |
| | | pageWrap.getModel().setUserId(user.getId()); |
| | | IPage<RoomsResponse> page = roomsService.getRoomsPage(pageWrap); |
| | | return ApiResponse.success("æ¥è¯¢æå",page); |
| | | } |
| | |
| | | @ApiOperation("ä¼è®®å®¤è¯¦æ
") |
| | | @GetMapping("/getRoomDetail") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "roomId", value = "ä¼è®®å®¤ä¸»é®", required = true), |
| | | }) |
| | | public ApiResponse<RoomsResponse> getRoomDetail(@RequestParam Integer roomId) { |
| | | public ApiResponse<RoomsResponse> getRoomDetail(@RequestParam Integer roomId,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | return ApiResponse.success("æ¥è¯¢æå",roomsService.getRoomDetail(roomId)); |
| | | } |
| | | |
| | |
| | | package com.doumee.cloud.web; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.annotation.trace.Trace; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.system.model.SystemDictData; |
| | | import com.doumee.service.business.UtilService; |
| | | import io.swagger.annotations.Api; |
| | |
| | | @Api(tags = "99ã帮å©ä¸å¡") |
| | | @Trace(exclude = true) |
| | | @RestController |
| | | @RequestMapping("/web/util") |
| | | @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/util") |
| | | @Slf4j |
| | | public class UtilApi extends ApiController{ |
| | | public class UtilApi extends BaseController { |
| | | |
| | | @Autowired |
| | | private UtilService utilService; |
| | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | |
| | | |
| | | @Select(" select a.id , b.`NAME` as roomName , a.`NAME` as meetingName ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate ," + |
| | | @Select(" select a.id , b.`NAME` as roomName , a.`NAME` as meetingName ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate , a.START_TIME as startTime, a.status ," + |
| | | " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime, c.REALNAME as bookingUser ," + |
| | | " CASE WHEN a.START_TIME > now() and a.`STATUS` = 0 THEN 1 WHEN a.END_TIME < now() or a.`STATUS` = 1 THEN 3 ELSE 2 END meetingStatus , b.IMGURL as imgUrl " + |
| | | " from meeting_book a inner join meeting_rooms b on a.ROOM_ID = b.ID " + |
| | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * Created by IntelliJ IDEA. |
| | |
| | | @ApiModelProperty(value = "ä¼è®®æ¶é´ ( a ~ b)") |
| | | private String meetingTime; |
| | | |
| | | |
| | | @ApiModelProperty(value = "ä¼è®®å¼å§æ¶é´",hidden = true) |
| | | private Date startTime; |
| | | |
| | | @ApiModelProperty(value = "ç¶æ 0å·²é¢çº¦ 1å·²æ¤é ",hidden = true) |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "ä¼è®®é¢çº¦äºº") |
| | | private String bookingUser; |
| | | |
| | |
| | | @ApiModelProperty(value = "åç¼") |
| | | private String prefixUrl; |
| | | |
| | | @ApiModelProperty(value = "ä¼è®®ç¶æ: 1=æªå¼å§ï¼2=è¿è¡ä¸ï¼3=å·²ç»æ") |
| | | @ApiModelProperty(value = "ä¼è®®ç¶æ: 1=æªå¼å§ï¼2=è¿è¡ä¸ï¼3=å·²ç»æ ; 4=å³å°å¼å§; 5=å·²æ¤é") |
| | | private Integer meetingStatus; |
| | | |
| | | } |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = {BusinessException.class, Exception.class}) |
| | | public Integer create(Bookings bookings) { |
| | | LoginUserInfo user = new LoginUserInfo(); |
| | | LoginUserInfo user = bookings.getLoginUserInfo(); |
| | | user.setId(bookings.getCreator()); |
| | | isCreateParamValid(bookings, user); |
| | | bookings.setCreateDate(new Date()); |
| | |
| | | String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode(); |
| | | page.getRecords().forEach(i -> { |
| | | i.setPrefixUrl(path); |
| | | if(i.getMeetingStatus().equals(Constants.ZERO)){ |
| | | if(i.getStatus()==Constants.ONE){ |
| | | i.setMeetingStatus(5); |
| | | }else{ |
| | | //å¼å§å5åé 大äºå½åæ¶é´ åæ¾ç¤ºå³å°å¼å§ |
| | | if(DateUtil.afterMinutesDate(i.getStartTime(),-5).getTime()>System.currentTimeMillis()){ |
| | | i.setMeetingStatus(4); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | }); |
| | | return page; |
| | | } |
| | |
| | | |
| | | public static void main(String[] args) { |
| | | try { |
| | | Date date = getISO8601DateByStr("2024-04-15T07:46:36.014+08:00"); |
| | | Date date1 = getISO8601DateByStr("2024-06-14T08:46:36.014+08:00"); |
| | | System.out.println(daysBetweenDates11(date1,date)+1); |
| | | // Date date = getISO8601DateByStr("2024-04-15T07:46:36.014+08:00"); |
| | | // Date date1 = getISO8601DateByStr("2024-06-14T08:46:36.014+08:00"); |
| | | System.out.println(DateUtil.afterMinutesDate(-5)); |
| | | |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * X åéåæ¶é´ |
| | | * @param minutes |
| | | * @return |
| | | */ |
| | | public static Date afterMinutesDate(Date date,Integer minutes){ |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MINUTE,minutes); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime to date |
| | | * @param now |
| | | * @return |