*V$>@}MYl>lW0^~ycYX}~K8E_a`Amu`aF=0? z8BgG@BI8cJ7VFT682P!_*oFMoF^v4Sv@SoQQe*+|3U1Mc1{EG hz6`mx3iTy&88o;17SB`AVLr80jORB0{{ff#{eQ95b}Rq@ literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..6ea539e --- /dev/null +++ b/public/index.html @@ -0,0 +1,16 @@ + + + + + + + Pear Project + + + + + + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..5da1e30 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,31 @@ + +++ + diff --git a/src/api/auth.js b/src/api/auth.js new file mode 100644 index 0000000..45d1627 --- /dev/null +++ b/src/api/auth.js @@ -0,0 +1,38 @@ +import $http from '@/assets/js/http' + +export function getAuthList(data) { + return $http.post('project/auth',data); +} + +export function doAuth(data) { + let url = 'project/auth/add'; + if (data.id) { + url = 'project/auth/edit'; + } + return $http.post(url, data); +} + +export function apply(auth_id = 0, nodes = [], action = 'get') { + let url = 'getnode'; + if (action === 'save') { + url = 'save'; + } + return $http.post('project/auth/apply', {action: url, id: auth_id, nodes: nodes}); +} + +export function forbid(id, status) { + return $http.post('project/auth/forbid', {id: id, status: status}); +} + +export function resume(id, status) { + return $http.post('project/auth/resume', {id: id, status: status}); +} + +/* 设置默认权限 */ +export function setDefault(id, is_default) { + return $http.post('project/auth/setDefault', {id: id, is_default: is_default}); +} + +export function del(id) { + return $http.post('project/auth/del', {id: id}); +} diff --git a/src/api/common.js b/src/api/common.js new file mode 100644 index 0000000..bd31372 --- /dev/null +++ b/src/api/common.js @@ -0,0 +1,5 @@ +import $http from '../assets/js/http' + +export function bindClientId(client_id, uid) { + return $http.post('index/index/bindClientId', {client_id: client_id, uid: uid}); +} diff --git a/src/api/common/common.js b/src/api/common/common.js new file mode 100644 index 0000000..8654203 --- /dev/null +++ b/src/api/common/common.js @@ -0,0 +1,30 @@ +import $http from '../../assets/js/http' + +export function install(data) { + return $http.post('index/index/install', data); +} + +export function checkInstall() { + return $http.post('index/index/checkInstall'); +} + +export function inviteInfo(inviteCode) { + return $http.post('project/invite_link/_read', {inviteCode: inviteCode}); +} + +export function createInviteLink(data) { + return $http.post('project/invite_link/save', data); +} + + +export function notifyOverview(to) { + return $http.post('index/notify/listTypeFormat', {to: to}); +} + +export function areasData() { + return $http.post('index/index/getAreaData'); +} + +export function refreshAccessToken(refreshToken) { + return $http.post('index/index/refreshAccessToken', {refreshToken: refreshToken}); +} diff --git a/src/api/department.js b/src/api/department.js new file mode 100644 index 0000000..ccd4644 --- /dev/null +++ b/src/api/department.js @@ -0,0 +1,21 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/department', data); +} + +export function read(departmentCode) { + return $http.post('project/department/read', {departmentCode: departmentCode}); +} + +export function doData(data) { + let url = 'project/department/save'; + if (data.departmentCode) { + url = 'project/department/edit'; + } + return $http.post(url, data); +} + +export function del(departmentCode) { + return $http.post('project/department/delete', {departmentCode: departmentCode}); +} diff --git a/src/api/departmentMember.js b/src/api/departmentMember.js new file mode 100644 index 0000000..2487725 --- /dev/null +++ b/src/api/departmentMember.js @@ -0,0 +1,23 @@ +import $http from '@/assets/js/http' +import {getApiUrl} from "../assets/js/utils"; + +/* 查找用户 */ +export function searchInviteMember(keyword, departmentCode) { + return $http.post('project/department_member/searchInviteMember', {keyword: keyword, departmentCode: departmentCode}); +} +export function inviteMember(accountCode, departmentCode) { + return $http.post('project/department_member/inviteMember', {accountCode: accountCode, departmentCode: departmentCode}); +} +export function removeMember(accountCode, departmentCode) { + return $http.post('project/department_member/removeMember', {accountCode: accountCode, departmentCode: departmentCode}); +} +export function list(data) { + return $http.post('project/department_member/index', data); +} +export function _downloadTemplate() { + return getApiUrl('project/department_member/_downloadTemplate'); +} +export function detail(data) { + return $http.post('project/department_member/detail', data); +} + diff --git a/src/api/file.js b/src/api/file.js new file mode 100644 index 0000000..aae7f1b --- /dev/null +++ b/src/api/file.js @@ -0,0 +1,30 @@ +import $http from '@/assets/js/http' +import {getApiUrl} from "../assets/js/utils"; + +export function list(data) { + return $http.post('project/file', data); +} + +export function read(fileCode) { + return $http.post('project/file/read', {fileCode: fileCode}); +} + +export function edit(data) { + return $http.post('project/file/edit', data); +} + +export function uploadFiles() { + return getApiUrl('project/file/uploadFiles'); +} + +export function recycle(fileCode) { + return $http.post('project/file/recycle', {fileCode: fileCode}); +} + +export function recovery(fileCode) { + return $http.post('project/file/recovery', {fileCode: fileCode}); +} + +export function del(fileCode) { + return $http.post('project/file/delete', {fileCode: fileCode}); +} diff --git a/src/api/menu.js b/src/api/menu.js new file mode 100644 index 0000000..0482ce2 --- /dev/null +++ b/src/api/menu.js @@ -0,0 +1,28 @@ +import $http from '@/assets/js/http' + +export function getMenuForUser() { + return $http.post('project/index'); +} + +export function getMenu() { + return $http.post('project/menu/menu'); +} + +export function doMenu(data) { + let url = 'project/menu/menuAdd'; + if (data.id) { + url = 'project/menu/menuEdit'; + } + return $http.post(url, data); +} +export function forbid(id, status) { + return $http.post('project/menu/menuForbid', {id: id, status: status}); +} + +export function resume(id, status) { + return $http.post('project/menu/menuResume', {id: id, status: status}); +} +export function delMenu(id) { + return $http.post('project/menu/menuDel', {id: id}); +} + diff --git a/src/api/node.js b/src/api/node.js new file mode 100644 index 0000000..453ba07 --- /dev/null +++ b/src/api/node.js @@ -0,0 +1,17 @@ +import $http from '@/assets/js/http' + +export function getNodeList(module = '') { + return $http.post('project/node', {module: module}); +} + +export function allList(module = '', node = '') { + return $http.post('project/node/allList', {module: module, node: node}); +} + +export function save(data) { + return $http.post('project/node/save', {list: data}); +} + +export function clear() { + return $http.post('project/node/clear'); +} diff --git a/src/api/notify.js b/src/api/notify.js new file mode 100644 index 0000000..8cbdcf9 --- /dev/null +++ b/src/api/notify.js @@ -0,0 +1,32 @@ +import $http from '@/assets/js/http' + +export function _clearAll(data) { + return $http.post('project/notify/_clearAll', data); +} +export function list(data) { + return $http.post('project/notify', data); +} + +export function noReads() { + return $http.post('project/notify/noReads'); +} + +export function doData(data) { + let url = 'project/notify/save'; + if (data.id) { + url = 'project/notify/edit'; + } + return $http.post(url, data); +} + +export function del(id) { + return $http.post('project/notify/delete', {id: id}); +} + +export function batchDel(ids) { + return $http.post('project/notify/batchDel', {ids: ids}); +} + +export function setReadied(ids) { + return $http.post('project/notify/setReadied', {ids: ids}); +} diff --git a/src/api/oauth.js b/src/api/oauth.js new file mode 100644 index 0000000..3fbe3ec --- /dev/null +++ b/src/api/oauth.js @@ -0,0 +1,10 @@ +import $http from '@/assets/js/http' +import {getFullUrl} from "../assets/js/utils"; + +export function dingTalkOauth() { + return getFullUrl('index/oauth/dingTalkOauth'); +} + +export function dingTalkLoginByCode(data) { + return $http.post('index/oauth/dingTalkLoginByCode', data); +} diff --git a/src/api/organization.js b/src/api/organization.js new file mode 100644 index 0000000..745a6e0 --- /dev/null +++ b/src/api/organization.js @@ -0,0 +1,30 @@ +import $http from '@/assets/js/http' +import store from '@/store'; + +export function list(data) { + return $http.post('project/organization', data); +} + +export function _getOrgList(data) { + return $http.post('project/organization/_getOrgList', data).then(res => { + if (res.data) { + store.dispatch('setOrganizationList', res.data); + } + return Promise.resolve(res); + }); +} + +export function doData(data) { + let url = 'project/organization/save'; + if (data.organizationCode) { + url = 'project/organization/edit'; + } + return $http.post(url, data); +} + +export function del(organizationCode) { + return $http.post('project/organization/delete', {organizationCode: organizationCode}); +} +export function _quitOrganization(data) { + return $http.post('project/organization/_quitOrganization', data); +} diff --git a/src/api/other.js b/src/api/other.js new file mode 100644 index 0000000..d3b9d1c --- /dev/null +++ b/src/api/other.js @@ -0,0 +1,13 @@ +import $ from 'jquery' +export function getYiYan(callback, type) { + if (type === undefined) { + type = 'f'; + } + let api = 'https://v1.hitokoto.cn/?c=' + type + '&encode=json'; + $.get({ + url: api, + success: function (data) { + callback(data); + } + }) +} \ No newline at end of file diff --git a/src/api/project.js b/src/api/project.js new file mode 100644 index 0000000..78c89aa --- /dev/null +++ b/src/api/project.js @@ -0,0 +1,47 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/project', data); +} +export function selfList(data) { + return $http.post('project/project/selfList', data); +} + +export function doData(data) { + let url = 'project/project/save'; + if (data.projectCode) { + url = 'project/project/edit'; + } + return $http.post(url, data); +} + +export function quit(code) { + return $http.post('project/project/quit', {projectCode: code}); +} +export function recycle(code) { + return $http.post('project/project/recycle', {projectCode: code}); +} +export function recovery(code) { + return $http.post('project/project/recovery', {projectCode: code}); +} +export function archive(code) { + return $http.post('project/project/archive', {projectCode: code}); +} +export function recoveryArchive(code) { + return $http.post('project/project/recoveryArchive', {projectCode: code}); +} +export function del(code) { + return $http.post('project/project/delete', {projectCode: code}); +} +export function read(code) { + return $http.post('project/project/read', {projectCode: code}); +} +export function analysis(data) { + return $http.post('project/project/analysis', data); +} +export function _projectStats(data) { + return $http.post('project/project/_projectStats', data); +} +export function _getProjectReport(data) { + return $http.post('project/project/_getProjectReport', data); +} diff --git a/src/api/projectCollect.js b/src/api/projectCollect.js new file mode 100644 index 0000000..e39dab1 --- /dev/null +++ b/src/api/projectCollect.js @@ -0,0 +1,6 @@ +import $http from '@/assets/js/http' + +/*收藏项目*/ +export function collect(code, type = 'collect') { + return $http.post('project/project_collect/collect', {type: type, projectCode: code}); +} diff --git a/src/api/projectEvents.js b/src/api/projectEvents.js new file mode 100644 index 0000000..eee0c66 --- /dev/null +++ b/src/api/projectEvents.js @@ -0,0 +1,32 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/events', data); +} +export function myList(data) { + return $http.post('project/events/myList', data); +} +export function getEventsLog(data) { + return $http.post('project/events/_getEventsLog', data); +} +export function read(data) { + return $http.post('project/events/read', data); +} +export function confirmJoin(data) { + return $http.post('project/events/confirmJoin', data); +} +export function getEventsListByCalendar(data) { + return $http.post('project/events/getEventsListByCalendar', data); +} + +export function doData(data) { + let url = 'project/events/save'; + if (data.code) { + url = 'project/events/edit'; + } + return $http.post(url, data); +} + +export function del(data) { + return $http.post('project/events/delete', data); +} diff --git a/src/api/projectFeatures.js b/src/api/projectFeatures.js new file mode 100644 index 0000000..e2eb7b9 --- /dev/null +++ b/src/api/projectFeatures.js @@ -0,0 +1,17 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/project_features', data); +} + +export function save(data) { + return $http.post('project/project_features/save', data); +} + +export function edit(data) { + return $http.post('project/project_features/edit', data); +} + +export function del(data) { + return $http.post('project/project_features/delete', data); +} diff --git a/src/api/projectInfo.js b/src/api/projectInfo.js new file mode 100644 index 0000000..9fdb87a --- /dev/null +++ b/src/api/projectInfo.js @@ -0,0 +1,17 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/project_info', data); +} + +export function doData(data) { + let url = 'project/project_info/save'; + if (data.infoCode) { + url = 'project/project_info/edit'; + } + return $http.post(url, data); +} + +export function del(data) { + return $http.post('project/project_info/delete', data); +} diff --git a/src/api/projectMember.js b/src/api/projectMember.js new file mode 100644 index 0000000..7f2c17e --- /dev/null +++ b/src/api/projectMember.js @@ -0,0 +1,21 @@ +import $http from '@/assets/js/http' + +/* 查找用户 */ +export function searchInviteMember(keyword, code) { + return $http.post('project/project_member/searchInviteMember', {keyword: keyword, projectCode: code}); +} +export function inviteMember(memberCode, code) { + return $http.post('project/project_member/inviteMember', {memberCode: memberCode, projectCode: code}); +} +export function _joinByInviteLink(inviteCode) { + return $http.post('project/project_member/_joinByInviteLink', {inviteCode: inviteCode}); +} +export function removeMember(memberCode, code) { + return $http.post('project/project_member/removeMember', {memberCode: memberCode, projectCode: code}); +} +export function list(data) { + return $http.post('project/project_member/index', data); +} +export function _listForInvite(data) { + return $http.post('project/project_member/_listForInvite', data); +} diff --git a/src/api/projectTemplate.js b/src/api/projectTemplate.js new file mode 100644 index 0000000..43f722e --- /dev/null +++ b/src/api/projectTemplate.js @@ -0,0 +1,16 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/project_template', data); +} + +export function doData(data) { + let url = 'project/project_template/save'; + if (data.code) { + url = 'project/project_template/edit'; + } + return $http.post(url, data); +} +export function del(code) { + return $http.post('project/project_template/delete', {code: code}); +} diff --git a/src/api/projectVersion.js b/src/api/projectVersion.js new file mode 100644 index 0000000..1842ab0 --- /dev/null +++ b/src/api/projectVersion.js @@ -0,0 +1,35 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/project_version', data); +} +export function getVersionTask(data) { + return $http.post('project/project_version/_getVersionTask', data); +} +export function getVersionLog(data) { + return $http.post('project/project_version/_getVersionLog', data); +} +export function read(data) { + return $http.post('project/project_version/read', data); +} + +export function save(data) { + return $http.post('project/project_version/save', data); +} + +export function edit(data) { + return $http.post('project/project_version/edit', data); +} +export function addVersionTask(data) { + return $http.post('project/project_version/addVersionTask', data); +} +export function removeVersionTask(data) { + return $http.post('project/project_version/removeVersionTask', data); +} +export function changeStatus(data) { + return $http.post('project/project_version/changeStatus', data); +} + +export function del(data) { + return $http.post('project/project_version/delete', data); +} diff --git a/src/api/sourceLink.js b/src/api/sourceLink.js new file mode 100644 index 0000000..d4c56e3 --- /dev/null +++ b/src/api/sourceLink.js @@ -0,0 +1,6 @@ +import $http from '@/assets/js/http' + + +export function del(sourceCode) { + return $http.post('project/source_link/delete', {sourceCode: sourceCode}); +} diff --git a/src/api/system.js b/src/api/system.js new file mode 100644 index 0000000..6d6106a --- /dev/null +++ b/src/api/system.js @@ -0,0 +1,5 @@ +import $http from '@/assets/js/http' + +export function info() { + return $http.post('project/index/systemConfig'); +} diff --git a/src/api/task.js b/src/api/task.js new file mode 100644 index 0000000..72e2c38 --- /dev/null +++ b/src/api/task.js @@ -0,0 +1,108 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task', data); +} +export function getListByTaskTag(data) { + return $http.post('project/task/getListByTaskTag', data); +} + +export function selfList(data) { + return $http.post('project/task/selfList', data); +} + +export function taskSources(data) { + return $http.post('project/task/taskSources', data); +} + +export function sort(data) { + return $http.post('project/task/sort', data); +} + +export function save(data) { + return $http.post('project/task/save', data); +} + +export function edit(data) { + return $http.post('project/task/edit', data); +} + +export function taskToTags(data) { + return $http.post('project/task/taskToTags', data); +} +export function setTag(data) { + return $http.post('project/task/setTag', data); +} + +export function like(code, like) { + return $http.post('project/task/like', {like: like, taskCode: code}); +} + +export function star(code, star) { + return $http.post('project/task/star', {star: star, taskCode: code}); +} + +export function createComment(code, comment, mentions) { + return $http.post('project/task/createComment', {taskCode: code, comment: comment, mentions: mentions}); +} + +export function assignTask(data) { + return $http.post('project/task/assignTask', data); +} + +export function batchAssignTask(data) { + return $http.post('project/task/batchAssignTask', data); +} + +export function read(code) { + return $http.post('project/task/read', {taskCode: code}); +} + +export function taskDone(code, done) { + return $http.post('project/task/taskDone', {taskCode: code, done: done}); +} + +export function setPrivate(code, isPrivate) { + return $http.post('project/task/setPrivate', {taskCode: code, private: isPrivate}); +} + +export function recycle(code) { + return $http.post('project/task/recycle', {taskCode: code}); +} + +export function recycleBatch(data) { + return $http.post('project/task/recycleBatch', data); +} + +export function recovery(code) { + return $http.post('project/task/recovery', {taskCode: code}); +} + +export function del(code) { + return $http.post('project/task/delete', {taskCode: code}); +} + +export function dateTotalForProject(data) { + return $http.post('project/task/dateTotalForProject', data); +} + +export function logs(data) { + return $http.post('project/task/taskLog', data); +} + +export function getLogBySelfProject(data) { + return $http.post('project/project/getLogBySelfProject', data); +} +export function _taskWorkTimeList(data) { + return $http.post('project/task/_taskWorkTimeList', data); +} +export function saveTaskWorkTime(data) { + return $http.post('project/task/saveTaskWorkTime', data); +} +export function editTaskWorkTime(data) { + return $http.post('project/task/editTaskWorkTime', data); +} +export function delTaskWorkTime(data) { + return $http.post('project/task/delTaskWorkTime', data); +} + diff --git a/src/api/taskMember.js b/src/api/taskMember.js new file mode 100644 index 0000000..a47856d --- /dev/null +++ b/src/api/taskMember.js @@ -0,0 +1,8 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task_member', data); +} +export function inviteMemberBatch(data) { + return $http.post('project/task_member/inviteMemberBatch', data); +} diff --git a/src/api/taskStages.js b/src/api/taskStages.js new file mode 100644 index 0000000..dc76ff7 --- /dev/null +++ b/src/api/taskStages.js @@ -0,0 +1,31 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task_stages', data); +} +export function taskTree(data) { + return $http.post('project/task_stages/taskTree', data); +} +export function _getAll(data) { + return $http.post('project/task_stages/_getAll', data); +} + +export function tasks(data) { + return $http.post('project/task_stages/tasks', data); +} + +export function sort(preCode, nextCode, projectCode) { + return $http.post('project/task_stages/sort', {preCode: preCode, nextCode: nextCode, projectCode: projectCode}); +} + +export function save(data) { + return $http.post('project/task_stages/save', data); +} + +export function edit(data) { + return $http.post('project/task_stages/edit', data); +} + +export function del(code) { + return $http.post('project/task_stages/delete', {code: code}); +} diff --git a/src/api/taskStagesTemplate.js b/src/api/taskStagesTemplate.js new file mode 100644 index 0000000..2adec8d --- /dev/null +++ b/src/api/taskStagesTemplate.js @@ -0,0 +1,16 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task_stages_template', data); +} + +export function doData(data) { + let url = 'project/task_stages_template/save'; + if (data.code) { + url = 'project/task_stages_template/edit'; + } + return $http.post(url, data); +} +export function del(code) { + return $http.post('project/task_stages_template/delete', {code: code}); +} diff --git a/src/api/taskTag.js b/src/api/taskTag.js new file mode 100644 index 0000000..b91b4aa --- /dev/null +++ b/src/api/taskTag.js @@ -0,0 +1,17 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task_tag', data); +} + +export function save(data) { + return $http.post('project/task_tag/save', data); +} + +export function edit(data) { + return $http.post('project/task_tag/edit', data); +} + +export function del(code) { + return $http.post('project/task_tag/delete', {tagCode: code}); +} diff --git a/src/api/taskWorkflow.js b/src/api/taskWorkflow.js new file mode 100644 index 0000000..de8665c --- /dev/null +++ b/src/api/taskWorkflow.js @@ -0,0 +1,20 @@ +import $http from '@/assets/js/http' + +export function list(data) { + return $http.post('project/task_workflow', data); +} +export function _getTaskWorkflowRules(data) { + return $http.post('project/task_workflow/_getTaskWorkflowRules', data); +} + +export function save(data) { + return $http.post('project/task_workflow/save', data); +} + +export function edit(data) { + return $http.post('project/task_workflow/edit', data); +} + +export function del(data) { + return $http.post('project/task_workflow/delete', data); +} diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..cfc23d6 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,147 @@ +import $http from '@/assets/js/http' +import router from '@/router'; +import store from '@/store'; +import {checkResponse, createRoute} from "../assets/js/utils"; + +export async function Login(data) { + return $http.post('project/login', data); +} + +export function register(data) { + return $http.post('project/login/register', data); +} + +export function getCaptcha(mobile) { + return $http.post('project/login/getCaptcha', {mobile: mobile}); +} + +export function _getMailCaptcha(email) { + return $http.post('project/login/_getMailCaptcha', {email: email}); +} + +export function _resetPasswordByMail(data) { + return $http.post('project/login/_resetPasswordByMail', data); +} + +export function changeCurrentOrganization(organization) { + const organizationCode = organization.code; + store.dispatch('setCurrentOrganization', organization); + return $http.post('project/index/changeCurrentOrganization', {organizationCode: organizationCode}).then(res=>{ + if (checkResponse(res)) { + store.dispatch('SET_MENU', res.data.menuList); + store.dispatch('SET_USER', res.data.member); + store.dispatch('windowLoading', true); + setTimeout(function () { + const menu = res.data.menuList; + if (menu) { + let routes = router.options.routes; + menu.forEach(function (v) { + routes[0].children.push(createRoute(v)); + if (v.children) { + v.children.forEach(function (v2) { + routes[0].children.push(createRoute(v2)); + if (v2.children) { + v2.children.forEach(function (v3) { + routes[0].children.push(createRoute(v3)); + }); + } + + }); + } + }); + router.addRoutes(routes); + store.dispatch('windowLoading', false); + // router.replace('/'); + } + }, 500); + return Promise.resolve(res); + } + }); +} + +export function _allList(data) { + return $http.post('project/account/_allList', data); +} + +export function list(data) { + return $http.post('project/account', data); +} + +export function forbid(accountCode) { + return $http.post('project/account/forbid', {accountCode: accountCode, status: 0}); +} + +export function resume(accountCode) { + return $http.post('project/account/resume', {accountCode: accountCode, status: 1}); +} + +export function doAccount(data) { + let url = 'project/account/add'; + if (data.code) { + url = 'project/account/edit'; + } + return $http.post(url, data); +} + +export function auth(id, auth) { + return $http.post('project/account/auth', {id: id, auth: auth}); +} + +export function del(accountCode) { + return $http.post('project/account/del', {accountCode: accountCode}); +} + +export function info($id) { + return $http.post('project/index/info', {id: $id}); +} + +export function read(code) { + return $http.post('project/account/read', {code: code}); +} + +export function syncDetail(data) { + return $http.post('project/account/_syncDetail', data); +} +export function editAccount(data) { + return $http.post('project/account/edit', data); +} + +export function editPersonal(data) { + return $http.post('project/index/editPersonal', data); +} + +export function editPassword(data) { + return $http.post('project/index/editPassword', data); +} + +export function _bindMobile(data) { + return $http.post('project/login/_bindMobile', data); +} + +export function _bindMail(data) { + return $http.post('project/login/_bindMail', data); +} + +export function _unbindDingtalk(data) { + return $http.post('project/login/_unbindDingtalk', data); +} + +export function _currentMember(data) { + return $http.post('project/login/_currentMember', data); +} + +export function _checkBindMail(data) { + return $http.post('project/login/_checkBindMail', data); +} + +export function _joinByInviteLink(inviteCode) { + return $http.post('project/account/_joinByInviteLink', {inviteCode: inviteCode}); +} + +export function _checkLogin(data) { + return $http.post('project/login/_checkLogin', data); +} + +export function _out(data) { + return $http.post('project/login/_out', data); +} diff --git a/src/assets/css/components/base.less b/src/assets/css/components/base.less new file mode 100644 index 0000000..fe78c2d --- /dev/null +++ b/src/assets/css/components/base.less @@ -0,0 +1,445 @@ +body { + overflow: hidden; + font-family: Dosis,Open Sans,pingfang SC,helvetica neue,arial,hiragino sans gb,microsoft yahei ui,microsoft yahei,simsun,sans-serif; +} +.ant-layout{ + background: #f5f5f5; +} +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.flex { + display: flex; +} + +//Text +.muted { + color: rgba(0, 0, 0, 0.45); + //font-weight: 400; +} + +.text-grey { + color: grey; +} + +.text-default { + color: #333; +} + +.text-primary { + color: @primary-color; +} + +.text-info { + color: @info-color; +} + +.text-success { + color: @success-color; +} + +.text-processing { + color: @processing-color; +} + +.text-error { + color: @error-color; +} + +.text-highlight { + color: @highlight-color; +} + +.text-warning { + color: @warning-color; +} + +.text-normal { + color: @normal-color; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-left { + text-align: left; +} + +//Input +.ant-input-lg { + font-size: 14px; +} + +.ant-select-lg { + font-size: 14px; +} + +//Alert + +.alert-white { + background: #fff; + border: 1px solid #dedede; + border-left: solid 3px #338fe5; + + .ant-alert-message { + margin: 5px 5px 5px 5px; + } +} + +.alert-error { + background: #fff; + border: 1px solid #f5222d; + border-left: solid 3px #f5222d; + + .ant-alert-message { + margin: 5px 5px 5px 5px; + } + + &.ant-alert-with-description { + padding: 5px 5px 5px 15px; + } +} + +//Button +.action-btn { + margin-top: 12px; + + .cancel-text { + margin-right: 12px; + } + + button { + margin-right: 4px; + } +} + +.group-btn, .submit-set { + .cancel-text { + margin-right: 12px; + } + + button { + margin-right: 4px; + } +} + +.middle-btn { + min-width: 66px; + //min-height: 42px; + //min-width: 90px; + //height: 35px !important; +} + +.ant-btn-lg { + font-size: 14px; +} + +.disabled-btn { + background-color: #d9d9d9 !important; + border-color: #d9d9d9 !important; + color: #fff !important; +} + +//Form +.ant-form-horizontal { + .ant-form-item-with-help { + margin-bottom: 12px; + } +} + +//Table +.ant-table-wrapper { + clear: both; +} + +.table-list { + .item { + display: inline-block; + + &.row-img { + img { + width: 85px; + height: 85px; + } + } + + &.row-title { + margin-left: 12px; + vertical-align: middle; + width: 75%; + + .title { + margin-bottom: 0; + + &.title-name { + padding: 5px 24px 5px 5px; + color: @primary-color; + } + } + } + } + + .edit-content { + .prefix { + position: absolute; + line-height: 2.3; + } + + .editable-cell { + width: 115px; + } + + &.price { + .editable-cell-input-wrapper, .editable-cell-text-wrapper { + padding-left: 15px; + } + } + } +} + +//Drowdown +.ant-dropdown-menu-item { + color: grey; +} + +.field-right-menu { + width: 240px; + + .ant-dropdown-menu-item { + min-height: 36px; + padding: 8px 16px; + position: relative; + + .menu-action { + position: absolute; + right: 16px; + top: 8px; + font-size: 12px; + color: @primary-color; + } + + .menu-desc { + padding-left: 22px; + font-size: 12px; + } + + .menu-item-content { + display: flex; + justify-content: space-between; + align-items: center; + } + } +} + +//Select +.ant-select { + min-width: 100px; +} + +.wangEditor-txt { + h1, h2, h3, h4, h5, h6 { + font-weight: bold; + } +} + +//Modal +.ant-modal { + top: 50px; +} + +//Badge + +.badge-blue { + .ant-badge-status-dot { + background-color: #1890ff; + } +} + +.badge-red { + .ant-badge-status-dot { + background-color: #f5222d; + } +} + +.badge-orange { + .ant-badge-status-dot { + background-color: #ff9900; + } +} + +.badge-green { + .ant-badge-status-dot { + background-color: #52c41a; + } +} + +.badge-brown { + .ant-badge-status-dot { + background-color: #2fbdb3; + } +} + +.badge-purple { + .ant-badge-status-dot { + background-color: #797ec9; + } +} + +.scroll-modal { + .ant-modal-body { + padding-bottom: 24px; + height: 70vh; + } + + .modal-content { + padding: 0 24px; + height: 100%; + } + + .modal-footer { + position: fixed; + bottom: 13vh; + background: #FFF; + margin-bottom: 0; + } +} + +.task-detail-modal { + width: 1200px; + + &.ant-modal { + padding-bottom: 0; + } + + .ant-modal-content { + .ant-modal-body { + padding: 0; + } + + } +} + +.hidden { + display: none; +} + +.project-navigation { + border-bottom: 1px solid #D9D9D9; + z-index: 1; + background-color: #F5F5F5; + transition: right 218ms ease; + position: fixed; + width: 100%; +} + +.project-navigation .ivu-breadcrumb-item-separator { + color: #383838; +} + +.project-navigation .ivu-breadcrumb > span:last-child { + font-weight: normal; +} + +.project-navigation .project-nav-header { + position: absolute; + z-index: 2; + left: 0; + height: 50px; + margin: 0; + padding: 15px; + + .nav-title { + font-size: 15px; + margin-right: 12px; + } + + .actions { + cursor: pointer; + margin-right: 12px; + } +} + +.project-navigation .nav-underscore { + position: relative; + height: 50px; + border: none; + margin-bottom: 0; +} + +.project-navigation .nav-body { + position: relative; + white-space: nowrap; + z-index: 1; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.project-navigation .nav-body .nav-wrapper.nav > li { + z-index: 2; + padding: 0 20px; +} + +.project-navigation .nav-underscore > li { + list-style: none; + float: left; +} + +.project-navigation .nav-underscore > li a { + display: inline-block; + position: relative; + height: 50px; + margin: 0; + padding: 15px 0; + color: #383838; + font-size: 15px; + font-weight: normal; +} + +.project-navigation .nav-body .nav-wrapper.nav > li .app[data-app=tasks] { + position: relative; + float: left; + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.project-navigation .nav-underscore > li > a:hover { + background-color: inherit; +} + +.project-navigation .nav-underscore > li > a:after { + position: absolute; + left: 0; + bottom: 0; + height: 3px; + width: 100%; + border-bottom: 0 solid #3da8f5; + content: ''; + opacity: 0; +} + +.project-navigation .nav-underscore > li > a:hover:after, .project-navigation .nav-underscore > .actives > a:after { + border-width: 3px; + opacity: 1; +} + +.simple { + .project-navigation { + background: hsla(0, 0%, 100%, .95); + } +} diff --git a/src/assets/css/components/commom.less b/src/assets/css/components/commom.less new file mode 100644 index 0000000..24b0273 --- /dev/null +++ b/src/assets/css/components/commom.less @@ -0,0 +1,402 @@ +/* MARGINS & PADDINGS */ + +.p-xxs { + padding: 5px; +} + +.p-xs { + padding: 10px; +} + +.p-sm { + padding: 15px; +} + +.p-m { + padding: 20px; +} + +.p-md { + padding: 25px; +} + +.p-lg { + padding: 30px; +} + +.p-xl { + padding: 40px; +} + +.p-w-xs { + padding: 0 10px; +} + +.p-w-sm { + padding: 0 15px; + +} + +.p-w-m { + padding: 0 20px; + +} + +.p-w-md { + padding: 0 25px; + +} + +.p-w-lg { + padding: 0 30px; + +} + +.p-w-xl { + padding: 0 40px; + +} + +.p-h-xs { + padding: 10px 0; +} + +.p-h-sm { + padding: 15px 0; + +} + +.p-h-m { + padding: 20px 0; + +} + +.p-h-md { + padding: 25px 0; + +} + +.p-h-lg { + padding: 30px 0; + +} + +.p-h-xl { + padding: 40px 0; + +} + +.m-xxs { + margin: 2px 4px; +} + +.m { + margin: 15px; +} + +.m-xs { + margin: 5px; +} + +.m-sm { + margin: 10px; +} + +.m-md { + margin: 20px; +} + +.m-lg { + margin: 30px; +} + +.m-xl { + margin: 50px; +} + +.m-n { + margin: 0 !important; +} + +.m-l-none { + margin-left: 0; +} + +.m-l-xs { + margin-left: 5px; +} + +.m-l-sm { + margin-left: 10px; +} + +.m-l { + margin-left: 15px; +} + +.m-l-md { + margin-left: 20px; +} + +.m-l-lg { + margin-left: 30px; +} + +.m-l-xl { + margin-left: 40px; +} + +.m-l-n-xxs { + margin-left: -1px; +} + +.m-l-n-xs { + margin-left: -5px; +} + +.m-l-n-sm { + margin-left: -10px; +} + +.m-l-n { + margin-left: -15px; +} + +.m-l-n-md { + margin-left: -20px; +} + +.m-l-n-lg { + margin-left: -30px; +} + +.m-l-n-xl { + margin-left: -40px; +} + +.m-t-none { + margin-top: 0; +} + +.m-t-xxs { + margin-top: 1px; +} + +.m-t-xs { + margin-top: 5px; +} + +.m-t-sm { + margin-top: 10px; +} + +.m-t { + margin-top: 15px; +} + +.m-t-md { + margin-top: 20px; +} + +.m-t-lg { + margin-top: 30px; +} + +.m-t-xl { + margin-top: 40px; +} + +.m-t-n-xxs { + margin-top: -1px; +} + +.m-t-n-xs { + margin-top: -5px; +} + +.m-t-n-sm { + margin-top: -10px; +} + +.m-t-n { + margin-top: -15px; +} + +.m-t-n-md { + margin-top: -20px; +} + +.m-t-n-lg { + margin-top: -30px; +} + +.m-t-n-xl { + margin-top: -40px; +} + +.m-r-none { + margin-right: 0; +} + +.m-r-xxs { + margin-right: 1px; +} + +.m-r-xs { + margin-right: 5px; +} + +.m-r-sm { + margin-right: 10px; +} + +.m-r { + margin-right: 15px; +} + +.m-r-md { + margin-right: 20px; +} + +.m-r-lg { + margin-right: 30px; +} + +.m-r-xl { + margin-right: 40px; +} + +.m-r-n-xxs { + margin-right: -1px; +} + +.m-r-n-xs { + margin-right: -5px; +} + +.m-r-n-sm { + margin-right: -10px; +} + +.m-r-n { + margin-right: -15px; +} + +.m-r-n-md { + margin-right: -20px; +} + +.m-r-n-lg { + margin-right: -30px; +} + +.m-r-n-xl { + margin-right: -40px; +} + +.m-b-none { + margin-bottom: 0; +} + +.m-b-xxs { + margin-bottom: 1px; +} + +.m-b-xs { + margin-bottom: 5px; +} + +.m-b-sm { + margin-bottom: 10px; +} + +.m-b { + margin-bottom: 15px; +} + +.m-b-md { + margin-bottom: 20px; +} + +.m-b-lg { + margin-bottom: 30px; +} + +.m-b-xl { + margin-bottom: 40px; +} + +.m-b-n-xxs { + margin-bottom: -1px; +} + +.m-b-n-xs { + margin-bottom: -5px; +} + +.m-b-n-sm { + margin-bottom: -10px; +} + +.m-b-n { + margin-bottom: -15px; +} + +.m-b-n-md { + margin-bottom: -20px; +} + +.m-b-n-lg { + margin-bottom: -30px; +} + +.m-b-n-xl { + margin-bottom: -40px; +} + +.space-15 { + margin: 15px 0; +} + +.space-20 { + margin: 20px 0; +} + +.space-25 { + margin: 25px 0; +} + +.space-30 { + margin: 30px 0; +} + +// IMAGES SIZE + +.img-sm { + width: 32px; + height: 32px; +} + +.img-md { + width: 64px; + height: 64px; +} + +.img-lg { + width: 96px; + height: 96px; +} + +// BORDER RADIUS + +// Alignment +.text-left { text-align: left; } +.text-right { text-align: right; } +.text-center { text-align: center; } +.text-justify { text-align: justify; } +.text-nowrap { white-space: nowrap; } + +// Transformation +.text-lowercase { text-transform: lowercase; } +.text-uppercase { text-transform: uppercase; } +.text-capitalize { text-transform: capitalize; } diff --git a/src/assets/css/components/index.less b/src/assets/css/components/index.less new file mode 100644 index 0000000..a4585c6 --- /dev/null +++ b/src/assets/css/components/index.less @@ -0,0 +1,6 @@ +@import "commom"; +@import "base"; +@import "layout"; +@import "list"; +@import "labels"; +@import "warpperContent"; diff --git a/src/assets/css/components/labels.less b/src/assets/css/components/labels.less new file mode 100644 index 0000000..eccfcb1 --- /dev/null +++ b/src/assets/css/components/labels.less @@ -0,0 +1,73 @@ + +// +// Labels +// -------------------------------------------------- + + +.label { + display: inline; + padding: .3em .8em; + font-size: 75%; + //font-weight: bold; + line-height: 1; + color: #FFF; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + background-color: #d1dade; + //font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + text-shadow: none; + + // Add hover effects, but only for links + a& { + &:hover, + &:focus { + color: #FFF; + text-decoration: none; + cursor: pointer; + } + } + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } +} + +// Colors +// Contextual variations (linked labels get darker on :hover) + +.label-default { + //background-color(@default-color); +} + +.label-primary { + background-color:(@primary-color); +} + +.label-success { + background-color:(@success-color); +} + +.label-info { + background-color:(@info-color); +} + +.label-warning { + background-color:(@warning-color); +} + +.label-danger { + background-color:(@error-color); +} +.label-normal { + color: gray; + background-color:(@normal-color); +} diff --git a/src/assets/css/components/layout.less b/src/assets/css/components/layout.less new file mode 100644 index 0000000..c61be7f --- /dev/null +++ b/src/assets/css/components/layout.less @@ -0,0 +1,316 @@ +#layout { + height: 100vh; + + .ant-layout-header { + background: #fff; + padding: 0; + line-height: 85px; + position: fixed; + width: 100%; + top: 0; + z-index: 5; + //box-shadow: 0 1px 4px rgba(0, 21, 41, .08); + box-shadow: 0 0 8px 0 rgba(0,0,0,.1); + ul { + border-bottom: none; + } + } + + .logo { + height: 32px; + padding: 16px; + text-align: center; + box-sizing: content-box; + transition: all .2s; + width: 224px; + float: left; + line-height: 1.4; + background: initial; + color: #FFF; + cursor: pointer; + .logo-img { + width: 30px; + position: absolute; + left: 35px; + top: 15px; + transition: all .2s; + } + + .title { + color: inherit; + font-size: 20px; + position: relative; + .version { + color: inherit; + position: absolute; + right: -25px; + font-size: 14px; + } + } + } + + .right-menu { + position: absolute; + right: 12px; + top: 0; + height: 100%; + line-height: 66px; + color: #FFF; + display: flex; + + .action { + cursor: pointer; + //display: inline-block; + transition: all .2s; + padding: 0 6px; + height: 65px; + + .anticon { + font-size: 16px; + //vertical-align: middle; + color: #FFF; + //color: rgba(0, 0, 0, .65); + } + + .action-item { + padding: 0 12px; + height: 100%; + position: relative; + + &.user-info { + padding-left: 52px; + + .ant-avatar { + position: absolute; + left: 12px; + top: 18px; + } + } + } + + &:hover { + background: rgba(0, 0, 0, .08); + //background: #e6f7ff; + } + + &.action-avatar { + padding: 0; + } + + &.action-organization { + //min-width: 200px; + text-align: center; + } + } + } + + .ant-layout-sider { + z-index: 2; + overflow: auto; + width: 256px !important; + max-width: 256px !important; + height: 100vh; + position: fixed; + left: 0; + box-shadow: 2px 0 8px 0 rgba(29, 35, 41, .05); + + &.ant-layout-sider-collapsed { + width: 80px !important; + max-width: 80px !important; + + .ant-layout-sider-trigger { + width: 80px !important; + } + + .logo { + .title { + display: none; + } + } + } + + .ant-layout-sider-trigger { + width: 256px !important; + } + + } + + .maint-content{ + .ant-layout-content{ + border-top: 1px solid #e8e8e8; + } + } + + .ant-layout-footer { + margin: 0 6px; + padding: 0 50px 12px 50px; + } + + .ant-layout-header.collapsed{ + .logo{ + width: 48px; + .logo-img{ + left: 27px; + } + .title{ + display: none; + } + } + } + + &.layout-light { + .ant-layout-header { + ul { + //background-color: #2b83f9; + //background-image: linear-gradient(143deg,#2945cb 20%,#2b83f9 81%,#3a9dff); + //background-image: linear-gradient(143deg, #2945cb 20%, #1890ff 81%, #3a9dff); + background-image: linear-gradient(143deg, #e12f3f 20%, #f79275 81%, #FFC107); + border-bottom: none; + + li { + border-bottom: none; + + span, i { + color: #FFF; + //opacity: .69; + } + + &:hover { + span, i { + opacity: 1; + } + } + + &.ant-menu-item-selected, &.ant-menu-item-active { + color: #1890ff; + background: rgba(0, 0, 0, 0.08); + } + } + } + } + + .ant-layout-sider { + background: #FFF; + .ant-layout-sider-children{ + .ant-menu-inline, .ant-menu-vertical, .ant-menu-vertical-left { + border-right: none; + } + } + } + + .logo { + .title { + color: inherit; + + .version { + color: inherit; + } + } + } + + .ant-layout-sider-trigger { + background: #FFF; + color: inherit; + } + } + + &.layout-dark { + .ant-layout-header { + ul { + background-color: #fff; + background-image: none; + } + } + + .logo { + background: #002140; + border-bottom: 1px solid #002140; + box-shadow: 2px 0 6px rgba(0, 21, 41, .35); + } + + .ant-layout-sider{ + box-shadow: 2px 0 6px rgba(0, 21, 41, .35); + } + + .right-menu { + color: initial; + + .action { + .anticon { + color: initial; + } + + .action-item { + &.user-info { + .ant-avatar { + } + } + } + + &:hover { + background: rgba(0,0,0,.025); + //background: #e6f7ff; + } + + &.action-avatar { + } + + &.action-organization { + } + } + } + + } + + header { + .ant-menu { + //-webkit-box-shadow: 0 1px 4px rgba(0,21,41,.08); + //box-shadow: 0 1px 4px rgba(0,21,41,.08); + } + } + + &.hide { + .ant-layout-sider { + display: none; + } + + .main-content { + padding-left: 0 !important; + } + } + + .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color .2s; + + &:hover { + color: #1890ff; + } + + } +} + +.middle-menu { + padding: 4px 0; + + .ant-dropdown-menu-item-divider, .ant-dropdown-menu-submenu-title-divider { + margin: 4px 0; + } + + .ant-dropdown-menu-item { + width: 160px; + } + + &.organization-menu { + .ant-dropdown-menu-item { + width: 100%; + } + } +} + +.__vuescroll .__rail-is-vertical { + z-index: 3; +} diff --git a/src/assets/css/components/list.less b/src/assets/css/components/list.less new file mode 100644 index 0000000..51511bd --- /dev/null +++ b/src/assets/css/components/list.less @@ -0,0 +1,29 @@ +.default-list { + .ant-list-item-meta-avatar { + .ant-avatar { + width: 50px; + height: 50px; + border-radius: 3px; + } + } + + .ant-list-item-content { + .other-info { + display: flex; + + .info-item { + display: flex; + flex-direction: column; + padding-left: 48px; + } + } + } + + .ant-list-item-action { + .anticon:hover { + svg { + color: @primary-color; + } + } + } +} diff --git a/src/assets/css/components/task.less b/src/assets/css/components/task.less new file mode 100644 index 0000000..1b2f4cd --- /dev/null +++ b/src/assets/css/components/task.less @@ -0,0 +1,1607 @@ +.project-space-task { +} + +.project-space-task .wrapper-main { + margin: 0; + padding: 0; + background: inherit; +} + +.project-space-task .wrapper-content { + background: #f5f5f5; + position: fixed; + height: 100%; + padding: 0 0 63px; +} + +.project-space-task .layout-content { + padding: 60px 10px 0 0; + height: 100%; + margin-left: 0; + margin-right: 0; + background: #fff; +} + +.project-space-task .manage-contents { + padding-left: 32px; + padding-right: 32px; +} + +.project-space-task .manage-contents h4 { + display: block; + border-bottom: 1px solid #e5e5e5; + padding-bottom: 12px; +} + + +.project-space-task .board-scrum-stages { + position: relative; + padding: 0 10px 10px 10px; + white-space: nowrap; + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + height: 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.scrum-stage { + position: relative; + height: 100%; + width: 295px; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + margin-right: 10px; + vertical-align: top; + background-color: #EEEEEE; + border-radius: 3px; + + .sortable-chosen { + cursor: pointer; + //display: none + } + + &.stage-ghost { + background: #e5e5e5; + + div { + display: none; + } + + } +} + +.scrum-stage .scrum-stage-header, .scrum-stage .sort-header-placeholder { + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 14px 18px; + font-size: 15px; + font-weight: bold; + z-index: 1; + transition: box-shadow 100ms ease; +} + +.scrum-stage-header.ui-sortable-handle { + cursor: move; +} + +.scrum-stage .stage-menu-toggler { + position: absolute; + right: 15px; +} + +.stage-menu-toggler .menu-toggler-title:hover { + color: #57a3f3; +} + + +.scrum-stage .stage-menu-toggler .ivu-select-dropdown { + border-radius: 3px; +} + +.stage-menu-toggler li { + line-height: 30px; + padding: 5px 15px; +} + +.task-popover-content .ivu-select-dropdown { + margin-top: 0; + padding-top: 0; +} + +.task-popover-content .popover-header { + text-align: center; + padding: 5px 10px; + background: #fff; + border-bottom: 1px solid rgba(0, 0, 0, .07); +} + +.task-popover-content .popover-title { + padding: 0; + font-size: 15px; + font-weight: 700; + line-height: 30px; + text-align: center; + background: none; + border: 0 none; + border-radius: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; +} + +.scrum-stage .scrum-stage-wrap { + position: relative; + height: 100%; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.scrum-stage .scrum-stage-content { + -webkit-flex: 1 1 0; + -ms-flex: 1 1 0; + flex: 1 1 0; + overflow: auto; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + padding-bottom: 40px; +} + +.scrum-stage .scrum-stage-content > ul { + /*margin-bottom: 8px;*/ +} + +.scrum-stage .scrum-stage-tasks, .scrum-stage .scrum-stage-tasks-done { + transition: opacity 0.08s ease-out; + opacity: 1; + min-height: 5px; + padding: 0 5px; + position: relative; +} + +.scrum-stage .task.task-card { + margin: 0 8px 8px; +} + +.task.task-card { + padding: 0; + background-color: white; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + cursor: pointer; + min-height: 52px; + + &.task-ghost { + border-left: 3px solid #e5e5e5 !important; + background: #e5e5e5; + + * { + visibility: hidden; + //display: none; + } + } +} + +.task-drag { + //transform:rotate(7deg); + //top: 0px !important; + cursor: pointer; + background: red; +} + +.sortable-fallback { + background: red; + cursor: pointer; + +} + +.task { + position: relative; + white-space: normal; +} + +.task { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.task.task-card .task-priority { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.task .task-priority.bg-priority-0 { + opacity: 0; +} + +.task .task-priority { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 6px; + cursor: pointer; + transition: width 218ms ease-in, opacity 218ms ease-in; +} + +.bg-priority-0 { + background-color: #A6A6A6; +} + +.task.task-card .task-content-set { + padding: 12px 0; + margin-left: 0; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} + +.task .task-content-set { + overflow: hidden; + margin: 0 0 0 12px; + line-height: 20px; + cursor: pointer; +} + +.task-content-input { + width: 100%; +} + +.task .task-content-set { + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.task.task-card .task-content-wrapper { + overflow: visible; +} + +.task .task-content-set .task-content-wrapper { + overflow: hidden; + min-height: 24px; +} + +.task .task-content-set .task-content-wrapper { + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.task .task-content-set .task-content-wrapper .task-content { + margin: 2px 12px 0 0; + padding: 0; + border: none; + background: none; + cursor: pointer; + word-wrap: break-word; + overflow: hidden; + transition: color 218ms ease; +} + +.task .task-content-set .task-content-wrapper .task-content { + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.scrum-stage .task.task-card .avatar { + opacity: 1; + margin: 0 14px 0 0; + transition: -webkit-transform 218ms ease-in-out, opacity 100ms; +} + +.task .avatar { + margin-right: 12px; +} + +.task .avatar { + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.task.task-card .task-info-wrapper { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + /*-webkit-flex-direction: column;*/ + /*-ms-flex-direction: column;*/ + /*flex-direction: column;*/ + padding-right: 14px; +} + +.task.task-card .task-info-wrapper .task-infos { + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + overflow: hidden; +} + +.task.task-card .task-infos { + margin-top: 4px; + line-height: 20px; + font-size: 0; +} + +.task.task-card .task-infos .label, .task.task-card .task-infos .icon-wrapper, .task.task-card .task-infos .tag { + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 20px; + font-size: 12px; + vertical-align: middle; + margin: 2px 6px 0 0; + //padding: 0 4px; + max-width: 100%; +} + +.task.task-card .task-infos .icon-wrapper { + font-size: 14px; + //width: 20px; + margin: 2px 10px 0 0; + + span { + margin-left: 3px; + } +} + +.task.task-card .task-infos .label { + padding-left: 6px; +} + +.label-important, .badge-important { + color: #FFFFFF; + background-color: #FF4F3E; +} + +.task.task-card .task-infos .label > span, .task.task-card .task-infos .icon-wrapper, .task.task-card .task-infos .tag { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.task.task-card .task-infos .tag { + position: relative; + padding-right: 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.task.task-card .task-infos .text { + width: 50px; + font-size: 12px; + //color: #19be6b; +} + +.tag-color-disc-blue { + background-color: #2d8cf0; +} + +.tag.tag-color-blue:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #2d8cf0; +} + +.tag-color-disc-orange { + background-color: #ff9900; +} + +.tag.tag-color-orange:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #ff9900; +} + +.tag-color-disc-red { + background-color: #ed3f14; +} + +.tag.tag-color-red:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #ed3f14; +} + +.tag-color-disc-green { + background-color: #19be6b; +} + +.tag.tag-color-green:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #19be6b; +} + +.tag-color-disc-brown { + background-color: #2fbdb3; +} + +.tag.tag-color-brown:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #2fbdb3; +} + +.tag-color-disc-purple { + background-color: #797ec9; +} + +.tag.tag-color-purple:before { + content: ' '; + position: absolute; + top: 7px; + left: 4px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #797ec9; +} + +.task-info-footer { + display: flex; + flex-direction: row-reverse; + margin-bottom: -12px; + + .task-id-number { + display: inline-block; + padding: 0 4px; + color: gray; + font-size: 12px; + line-height: 20px; + background-color: #f5f5f5; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-top: 4px; + border-radius: 4px 0 4px 0; + } +} + +.scrum-stage .task-creator-handler-wrap .task-creator-handler { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 14px 15px; + //border-radius: 3px; + font-size: 15px; +} + +.scrum-stage .task-creator-handler-wrap .task-creator-handler:hover { + background-color: #E5E5E5; +} + +.link-add-handler { + color: #2d8cf0 !important; + transition: color 218ms ease; +} + +.link-add-handler { + //margin-right: 10px; +} + +.img-24 { + display: inline-block; + width: 24px; + height: 24px; + background-color: #eee; + background-size: 24px 24px; +} + +.img-32 { + display: inline-block; + width: 32px; + height: 32px; + background-color: #eee; + background-size: 32px 32px; +} + +.img-circle { + border-radius: 50%; +} + +.disabled { + cursor: not-allowed; + color: rgba(0, 0, 0, 0.45); +} + +.task.task-card.done .check-box, .task.task-card.done .task-content-set { + opacity: 0.64; + filter: alpha(opacity=64); +} + +.task.task-card .check-box { + //margin: 14px 12px 0 8px; +} + +.task .check-box-wrapper { + display: flex; + align-items: center; + text-align: center; + margin: 11px 6px 0 6px; + justify-content: center; + transition: background 218ms; + border-radius: 3px; + &:hover { + .check-box { + color: grey; + } + + background: #f5f5f5; + } +} + +.task .check-box { + //width: 20px; + //height: 20px; + //margin-top: 2px; + //border: solid 2px #A6A6A6; + color: #A6A6A6; + cursor: pointer; + border-radius: 3px; + margin: 5px; +} + +.task .check-box.disabled { + border-color: #ccc !important; + background-color: #f5f5f5; + cursor: not-allowed; +} + +.children-task-list .task .check-box { + width: 15px; + height: 15px; + margin-top: 6px; +} + +.task .check-box { + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.task .check-box:hover { + border-color: #808080; +} + +.task.done { + background-color: #F7F7F7; +} + +.children-task-list .task.done { + background-color: inherit; +} + +.task.done .task-content { + color: #A6A6A6; + text-decoration: line-through; +} + +.task.done .check-box .anticon-check { + //font-weight: bold; + visibility: visible; +} + +.task .check-box .anticon-check { + visibility: hidden; + color: #A6A6A6; + font-size: 12px; + -webkit-transform: translate(2px, 0); + transform: translate(2px, 0); + top: 18px; + left: 10px; + position: absolute; +} + +.ivu-modal .task .check-box .anticon-check { + top: 10px; + left: 5.8px; +} + +.children-task-list .task .check-box .anticon-check { + font-size: 12px; + -webkit-transform: translate(1px, -4px); + transform: translate(1px, -4px); + top: 17px; +} + +.scrum-stage .task-creator-wrap { + margin: 0 8px 8px; + box-shadow: 0 0.5px 2px rgba(0, 0, 0, 0.1); +} + +.scrum-stage .task-creator-wrap .submit-set .middle-btn { + width: 50%; +} + +.project-space-task .card { + border: 0 none; + background-color: #FFFFFF; + border-radius: 2px; + box-shadow: rgba(0, 0, 0, 0.0470588) 0 2px 3px 0; +} + +.project-space-task .card { + background-color: #fff; + border: 0 none; + border-radius: 2px; + -webkit-box-shadow: rgba(0, 0, 0, .0470588) 0 2px 3px 0; + box-shadow: rgba(0, 0, 0, .0470588) 0 2px 3px 0; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.fade.in { + opacity: 1; +} + +.task-creator { + position: relative; + padding: 10px; +} + +.task-creator-wrap .executor-handler { + display: flex; + align-items: center; +} + +.task-creator-wrap .executor-handler .avatar { + margin-right: 8px; +} + +.executor-handler-menu { + .ant-dropdown-menu-item { + position: relative; + line-height: 32px; + + .anticon-check { + position: absolute; + float: right; + top: 16px; + right: 12px; + font-size: 12px; + } + + } + + //padding-top: 15px; +} + +.task-creator-wrap .ivu-select-dropdown { + position: absolute !important; + width: 238px; + left: 0 !important; +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +input.form-control, textarea.form-control { + background-color: #FFFFFF; + border: 1px solid #D9D9D9; + border-radius: 3px; + line-height: 20px; +} + +.task-creator .handler-wrap { + position: relative; + height: 54px; + border-bottom: 1px solid #EEEEEE; +} + +.task-creator .handler-wrap > a { + width: 100%; + display: inline-block; + //padding: 15px 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.task-creator .handler-wrap .creator-handler-text.name { + font-weight: bold; + margin-right: 4px; +} + +.task-creator .handler-wrap .creator-handler-text { + line-height: 24px; +} + +.task-creator .handler-wrap > a > .icon, .task-creator .handler-wrap > a > .avatar { + display: inline-block; + line-height: 24px; + float: left; + margin-right: 8px; +} + +.involve-view { + padding: 12px 0 5px; + position: relative; +} + +.involve-view .involve-header { + margin-bottom: -3px; + color: #808080; + font-size: 13px; + font-weight: bold; +} + +.involve-view .involve-members { + margin: 10px 0 -5px -10px; +} + +.involve-view .involve-members > li { + position: relative; + float: left; + margin: 0 0 10px 10px; + cursor: pointer; +} + +.involve-view .involve-members > li > .avatar { + display: block; + width: 24px; + height: 24px; + transition: -webkit-transform 2110ms ease-in-out; +} + +.avatar { + background-size: cover !important; + background-repeat: no-repeat !important; + background-position: center !important; +} + +.involve-view .involve-members > li { + position: relative; + float: left; + margin: 0 0 10px 10px; + cursor: pointer; +} + +.involve-view .add-involvement-handler { + display: block; + font-size: 24px; + color: #A6A6A6; +} + +.add-member { + color: #3da8f5; + display: block; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; +} + +.task-creator .handler-wrap > a { + width: 100%; + display: inline-block; + padding: 6px 0; + margin: 6px 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.task-creator .handler-wrap .creator-handler-text { + line-height: 24px; +} + +.project-space-task .menu-toggler-title, .project-space-task .footer-item { + color: #808080; + text-decoration: none; + cursor: pointer; +} + +.task-creator .tags-wrap, .task-creator .involve-wrap { + border-bottom: 1px solid #EEEEEE; +} + +.task-creator .submit-set { + position: relative; + margin-top: 10px; +} + +.scrum-stage.fixed-creator .task-creator-handler-wrap { + position: fixed; + bottom: 10px; + height: 50px; + width: 295px; +} + +.task-creator-handler-wrap { + /*box-shadow: 0 -3px 2px -2px rgba(0, 0, 0, 0.1);*/ +} + +.task-creator-handler-wrap { + width: 100%; + background-color: #EEEEEE; + transition: box-shadow 218ms ease; + /*bottom: 0;*/ + /*position: absolute;*/ +} + +.scrum-stage-wrap.ui-sortable { + padding-bottom: 50px; +} + +.hidden-creator-bottom { + padding-bottom: 0 !important; +} + +.create-stage { + height: auto; + cursor: default; + + .create-stage-footer { + text-align: right; + padding-top: 10px; + + .cancel-text { + margin-right: 24px; + font-size: 14px; + } + } + + .ant-input { + padding-top: 12px; + padding-bottom: 12px; + height: 40px; + line-height: 40px; + } +} + +/*.task-datepicker .ivu-select-dropdown{*/ +/*left: 18px !important;*/ +/*top: 360px !important;*/ +/*}*/ +.detail-content .wangEditor-container { + min-height: 200px; +} + +.activities-timeline .activities-list-wrap { + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; +} + +.activities-timeline > div, .activities-timeline > ul { + margin-right: -1px; + margin-left: -1px; + overflow: hidden; + background-color: #FFFFFF; +} + +.activities-list { + padding-bottom: 0; +} + +.activities-timeline .activities-list { + position: relative; +} + +.activity:first-child { + margin-top: 12px; +} + +.activity { + position: relative; + overflow: hidden; + margin: 15px; + padding-left: 15px; +} + +.activity .activity-body-coyness { + font-size: 12px; + margin: 0 0 0 25px; + padding-left: 10px; +} + +.activity .activity-body-coyness .activity-content { + cursor: pointer; +} + +.activity .activity-content { + color: #383838; +} + +.readable > *:last-child { + margin-bottom: 0; +} + +.activity .activity-body-coyness .activity-content.overflow .activity-description { + display: block; +} + +.activity .activity-body-coyness .activity-content .activity-description { + display: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 12px; + border-left: 5px solid #EEEEEE; +} + +.activity .activity-content > blockquote { + margin: 5px 0 0 0; + padding: 0 0 0 10px; +} + +.readable blockquote { + font-size: 14px; + border-left: 6px solid #ddd; + padding: 5px 0 5px 10px; +} + +blockquote { + font-size: 12px; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} + +.activity .activity-body-coyness .activity-content.overflow .activity-content-detail { + display: none; +} + +li.activity.creator i { + margin-top: 0; +} + +.activities-timeline.early-hidden .activity-early-wrap, .activities-timeline.early-shown .activity-early-wrap, .activities-timeline.early-loading .activity-early-wrap { + display: block; +} + +.activities-timeline .activity-early-wrap { + display: none; +} + +.activities-timeline .activity-early-handler { + display: block; + padding: 0 35px 0; + font-size: 14px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.link-add-handler { + color: #3da8f5 !important; + transition: color 218ms ease; +} + +.task.task-card.ui-sortable-handle.dragging, .scrum-stage-tasks-done .task.task-card.ui-sortable-handle.dragging { + cursor: move; +} + +/*紧急程度一般*/ +.task.task-card.ui-sortable-handle:hover, .scrum-stage-tasks-done .task.task-card.ui-sortable-handle:hover { + border-left: 3px solid #a6a6a6; +} + +.task.task-card.ui-sortable-handle.warning { + border-left: 3px solid #ff9900; +} + +.task.task-card.ui-sortable-handle.error { + border-left: 3px solid #ed3f14; +} + +.task.task-card.ui-sortable-handle.warning:hover { + border-left: 3px solid #ff9900; +} + +.task.task-card.ui-sortable-handle.error:hover { + border-left: 3px solid #ed3f14; +} + +.task.task-card.ui-sortable-handle { + border-left: 3px solid #fff; + -webkit-transition-property: border-left; + -webkit-transition-duration: 0.5s; + -webkit-transition-timing-function: ease; +} + +.scrum-stage-tasks-done .task.task-card.ui-sortable-handle { + border-left: 3px solid #f7f7f7; +} + +.scrum-stage-tasks-done .task.task-card.ui-sortable-handle.warning { + border-left: 3px solid #ff9900; +} + +.scrum-stage-tasks-done .task.task-card.ui-sortable-handle.error { + border-left: 3px solid #ed3f14; +} + +.scrum-stage-tasks-done .task.task-card.ui-sortable-handle.warning:hover { + border-left: 3px solid #ff9900; +} + +.scrum-stage-tasks-done .task.task-card.ui-sortable-handle.error:hover { + border-left: 3px solid #ed3f14; +} + +.activities-list { + font-size: 18px; + padding-left: 3px; +} + +.detail-content .ivu-upload-list { + clear: both; +} + +.project-nav-footer { + position: absolute; + right: 0; + top: 0; + display: flex; + height: 50px; + align-items: center; + z-index: 998; +} + +.project-nav-footer .footer-item { + font-size: 14px; + position: relative; + padding: 15px 10px; + margin: 0 5px; + float: right; + display: inline-block; + text-align: center; +} + +.project-nav-footer .footer-item.active { + color: #2D8cF0; +} + +.project-nav-footer .footer-item:hover { + color: #2D8cF0; +} + +.project-nav-footer :not(:first-child):after { + position: absolute; + content: ''; + right: -5px; + top: 16px; + bottom: 16px; + width: 1px; + background-color: #A6A6A6; +} + + +.menu-modal .ivu-modal-mask { + overflow: hidden; + background-color: inherit; + width: 0; +} + +.menu-modal .ivu-modal-wrap { + //width:0; + z-index: 1; +} + +.menu-modal .ivu-modal { + position: fixed; + top: 111px; + right: 0; + height: 100%; + box-shadow: -3px 0 3px rgba(0, 0, 0, 0.1); +} + +.menu-modal .ivu-modal-header { + text-align: center; +} + +.menu-modal .ivu-modal-content { + height: 100%; + background-color: #F7F7F7; +} + +.menu-modal .ivu-modal-body { + padding: 0; +} + +.menu-modal .ivu-modal-footer { + display: none; +} + +.menu-modal .ivu-modal-content .project-menus { + position: relative; + padding-bottom: 1px; +} + +.menu-modal .ivu-modal-content .project-menus:after { + position: absolute; + left: 14px; + right: 16px; + bottom: 0; + content: ' '; + height: 1px; + background-color: rgba(0, 0, 0, 0.06); +} + +.project-menus .list > li { + position: relative; + line-height: 30px; +} + +.project-menus .list > li:first-child > a { + margin-top: 5px; +} + +.project-menus .list > li:first-child > a { + margin-top: 5px; +} + +.project-menus .list > li > a { + display: flex; + align-items: center; + cursor: pointer; + padding: 5px 15px; + text-decoration: none; + color: #808080; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.project-menus .list > li > a { + color: #808080; + font-size: 16px; + width: 35px; + text-align: center; +} + +.project-menus .activities-panel-menu-list > li > a { + color: #383838; + font-weight: 600; +} + +.project-menus .activities-panel-menu-list > li:hover a { + background-color: #EEEEEE; +} + +.activity-card-datas.activity-card:first-child { + margin-top: 5px; +} + +.activity-card:first-child { + margin-top: 0; +} + +.activity-card-datas { + margin-top: 5px; + margin-bottom: 15px; + padding: 0 15px; +} + +.activity-card { + position: relative; + line-height: 20px; + padding: 10px 15px 0; + margin: 9px auto 0; +} + +.activity-card .activity-card-header { + position: relative; + margin-bottom: 10px; + display: inline-block; + vertical-align: middle; + float: left; + margin-right: 10px; +} + +.activity-card-datas .activity-card-header { + display: block; + float: none; + margin-bottom: 0; + font-weight: 600; + line-height: 35px; +} + +.activity-card .activity-card-header { + color: #808080; + font-size: 16px; + width: 35px; + text-align: center; +} + +.activity-card .activity-card-title { + margin-right: 6px; +} + +.activity-card .activity-card-header .activity-card-title { + z-index: 1; + display: inline-block; + margin-bottom: 8px; +} + +.activity-card-datas .activity-card-header .activity-card-title { + line-height: 24px; + margin-bottom: 0; +} + +.activity-card-datas .data-statistics { + padding-bottom: 10px; +} + +.activity-card-datas .data-statistics > div { + display: inline-block; + vertical-align: middle; + cursor: pointer; + width: 130px; + margin-left: 29px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 13px; + border-radius: 2px; + font-size: 14px; +} + +.activity-card-datas .data-statistics > div:hover { + background-color: #EEEEEE; +} + +.activity-card-datas .data-statistics .activity-link-today { + margin-left: 0; +} + +.activity-card-datas .data-statistics .unassignedtasks-number { + color: #19be6b; + font-size: 24px; + display: inline-block; + margin-top: 5px; +} + +.activity-card-datas .data-statistics .todayDatas-number { + color: #ff9900; + font-size: 24px; + display: inline-block; + margin-top: 5px; +} + +.activity-card-datas .data-statistics::after { + position: absolute; + left: 49px; + right: 15px; + bottom: 1px; + content: ' '; + height: 1px; + background-color: rgba(0, 0, 0, 0.06); +} + +.activity-panel-card-table { + position: relative; + display: flex; +} + +.activity-card-table.activity-card { + width: 100%; + margin: 10px 15px; + padding: 0 0 15px; +} + +.activity-panel-card-table .activity-card-table .activity-card-header { + width: 100%; +} + +.activity-card-table .activity-card-title { + padding-left: 34px; +} + +.activity-card-table .activity-card-body { + display: block; + margin-left: 34px; + margin-right: 0; + min-height: 100px; + background-color: #FFFFFF; +} + +.activity-card-table::after { + position: absolute; + left: 34px; + right: 1px; + bottom: 0; + content: ' '; + height: 1px; + background-color: rgba(0, 0, 0, 0.06); +} + +.activity-panel-activities-list .activity-panel-activities-title { + position: relative; + line-height: 30px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding-top: 5px; +} + +.activity-panel-activities-list .activity-panel-activities-title .project-activies-title { + color: #383838; + padding: 5px 15px; + font-weight: 600; +} + +.project-activies-title { + color: #808080; + font-size: 16px; + width: 35px; + text-align: center; +} + +.activity-panel-activities-wrap { + margin-top: -5px; +} + +.activity-card.activity-task { + padding-top: 25px; + padding-left: 20px; +} + +.work { + position: relative; +} + +.activity-card .activity-content { + overflow: hidden; + padding-bottom: 5px; + color: #383838; +} + +.activity-card .activity-content .activity-card-title { + display: inline-block; + vertical-align: middle; + margin-bottom: 5px; +} + +.activity-card.activity-task .activity-card-title { + width: 100%; +} + +.activity-card .activity-card-title { + margin-right: 6px; +} + +.activity-card .activity-card-body:empty { + display: none; +} + +.activity-card .activity-card-footer { + margin-bottom: 5px; + display: inline-block; + vertical-align: bottom; +} + +.react-time-stamp { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.activity-card .activity-card-footer time { + color: #808080; + font-size: 12px; +} + +.activity-card .activity-card-footer:after { + clear: both; +} + +.activity-panel-activities .activity-panel-activities-body .activity-content::after { + position: absolute; + left: 48px; + right: 16px; + bottom: -5px; + content: ' '; + height: 1px; + background-color: rgba(0, 0, 0, 0.06); +} + +.menu-modal .user-content { + padding: 15px; +} + +.user-menu-modal .menu-user-list img { + width: 36px; + height: 36px; +} + +.user-menu-modal .project-menus .list > li { + line-height: 10px; +} + +.user-menu-modal .user-info { + width: 100%; + padding-left: 10px; + padding-bottom: 10px; +} + +.user-menu-modal .user-item { + line-height: 30px; +} + +.user-menu-modal .ivu-modal-content .project-menus:after { + background-color: inherit; +} + +.task-type-move { + cursor: move; + //border: 1px solid rgb(61, 168, 245); + box-shadow: 0 1px 5px 1px #c0c0c0; + //background: red; + //transform: rotate(2deg) !important; +} + +.task-move { + //transform: rotate(2deg); + +} + +.project-space-task { + &.simple { + .project-navigation { + background: hsla(0, 0%, 100%, .95); + } + + .layout-content { + background: inherit; + + .scrum-stage .scrum-stage-header, .scrum-stage .sort-header-placeholder { + padding: 14px 14px; + font-size: 14px; + } + + .scrum-stage-wrap.ui-sortable { + padding-bottom: 40px; + } + .scrum-stage-wrap.ui-sortable.hidden-creator-bottom { + padding-bottom: 80px; + } + + .scrum-stage { + background: inherit; + margin-right: 0; + + .scrum-stage-tasks { + //padding-left: 0 + } + } + + .task.task-card .check-box { + //margin: 16px 12px 0 10px; + } + + .task .check-box { + //width: 16px; + //height: 16px; + } + + + .task.done { + background: #fff; + } + + .scrum-stage-tasks-done .task.task-card.ui-sortable-handle { + border-left: 3px solid #fff; + } + + .task-creator-handler-wrap { + background: #fff; + height: auto; + margin: 0 12px; + width: 270px; + border-radius: 3px; + + .task-creator-handler { + font-size: 14px; + color: #a6a6a6 !important; + border-radius: 3px; + + &:hover { + color: #3da8f5 !important; + //box-shadow: 0 1px 4px rgba(0, 0, 0, .15); + background-color: inherit; + } + + &.link-add-handler { + padding: 5px 15px; + display: flex; + justify-content: center; + } + + } + } + } + } +} diff --git a/src/assets/css/components/warpperContent.less b/src/assets/css/components/warpperContent.less new file mode 100644 index 0000000..f15cf5e --- /dev/null +++ b/src/assets/css/components/warpperContent.less @@ -0,0 +1,146 @@ +.page-title { + font-size: 18px; + color: #464c5b; + line-height: 35px; + padding-bottom: 5px; + font-weight: 400; + //border-bottom: 1px solid #e5e5e5; +} +.content-title { + font-size: 18px; + color: #464c5b; + line-height: 35px; + padding-bottom: 12px; + margin-bottom: 12px; + min-height: 52px; + font-weight: 400; + border-bottom: 1px solid #e5e5e5; +} + +.content-action { + float: right; +} + +.content-action + .page-title { + //padding-top: 55px; +} +.page-header{ + //margin-top: 65px; + background: #fff; + padding: 16px 32px 0; + border-bottom: 1px solid #e8e8e8; + .breadcrumb{ + margin-bottom: 16px; + } + .detail{ + display: flex; + .row { + display: flex; + width: 100%; + } + .main{ + width: 100%; + flex: 0 1 auto; + .title{ + flex: auto; + font-size: 20px; + font-weight: 500; + color: rgba(0,0,0,.85); + margin-bottom: 16px; + } + .logo{ + width: 28px; + height: 28px; + border-radius: 4px; + margin-right: 16px; + } + .content{ + margin-bottom: 16px; + flex: auto; + } + .extra{ + flex: 0 1 auto; + margin-left: 88px; + min-width: 242px; + text-align: right; + } + .action{ + margin-left: 56px; + min-width: 266px; + flex: 0 1 auto; + text-align: right; + } + } + } +} +.page-header-none{ + padding: 0; + border-bottom: none; +} + +.wrapper-main { + margin: 24px; + padding: 24px 0 12px 24px; + background: rgb(255, 255, 255); +} + +.wrapper-content { + width: 100%; + padding-right: 24px; + transition: all 368ms; + .action{ + padding-bottom: 12px; + line-height: 3; + } +} + +.layout-content { +} + +.page-search { + margin-bottom: 16px; +} + +.has-header-content .wrapper-content { + padding: 80px 20px 0 276px; + margin-top: 0; + height: 100%; +} + +.has-header-content .layout-content { + box-shadow: 0 2px 3px 0 rgba(0, 0, 0, .047); + padding: 5px 30px 15px 30px; +} + +.wrapper-content .data-content { + margin-top: 30px; +} + +.layout-content .content-header { + height: 56px; + z-index: 5; + width: 100%; + line-height: 56px; + overflow: hidden; + border-bottom: 1px solid #e5e5e5; + margin-bottom: 35px; +} + +.layout-content .content-header h1:first-child { + cursor: pointer; + color: @primary-color; +} + +.layout-content .content-header h1 { + font-size: 14px; + float: left; + line-height: 56px; + font-weight: 400; +} + +.layout-copy { + text-align: center; + padding: 10px 0 20px; + color: #9ea7b4; +} + diff --git a/src/assets/css/project/memberMenu.less b/src/assets/css/project/memberMenu.less new file mode 100644 index 0000000..cc8c66d --- /dev/null +++ b/src/assets/css/project/memberMenu.less @@ -0,0 +1,66 @@ +.member-menu { + background: #fff; + box-shadow: 0 2px 20px rgba(0, 0, 0, .1); + padding: 12px 0; + width: 250px; + height: 375px; + border-radius: 4px; + + .header { + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 12px 0; + } + + .search-content { + padding: 12px; + + .ant-input { + font-size: 14px; + } + } + + .member-list { + height: 235px; + position: relative; + + .list-group { + .title { + display: block; + margin: 6px 12px; + } + + .member-list-item { + padding: 12px; + cursor: pointer; + border-bottom: none; + + .ant-list-item-meta { + align-items: center; + } + + &.owner { + cursor: not-allowed; + } + + &:hover { + background-color: #f5f5f5; + } + } + } + + .ant-list-empty-text { + text-align: left; + } + } + + .footer { + border-top: 1px solid #e5e5e5; + padding: 12px 12px 0 12px; + position: fixed; + width: 250px; + height: 75px; + } + +} diff --git a/src/assets/css/theme.less b/src/assets/css/theme.less new file mode 100644 index 0000000..5abe1ae --- /dev/null +++ b/src/assets/css/theme.less @@ -0,0 +1,4 @@ +@import "~ant-design-vue/dist/antd.less"; +@import "components/index"; +@import "project/memberMenu"; + diff --git a/src/assets/css/wangEditor.css b/src/assets/css/wangEditor.css new file mode 100644 index 0000000..ffc9aa3 --- /dev/null +++ b/src/assets/css/wangEditor.css @@ -0,0 +1,831 @@ +/* 编辑器边框颜色 */ +/* 菜单颜色、上边框颜色 */ +/* 菜单选中状态的颜色 */ +/* input focus 时的颜色 */ +/* 按钮颜色 */ +/* tab selected 状态下的颜色 */ +.wangEditor-container { + position: relative; + background-color: #fff; + border: 1px solid #ccc; + z-index: 1; + width: 100%; +} +.wangEditor-container a:focus, +.wangEditor-container button:focus { + outline: none; +} +.wangEditor-container, +.wangEditor-container * { + margin: 0; + padding: 0; + box-sizing: border-box; + line-height: 1; +} +.wangEditor-container img { + border: none; +} +.wangEditor-container .clearfix:after { + content: ''; + display: table; + clear: both; +} +.wangEditor-container .clearfix { + *zoom: 1; +} +.wangEditor-container textarea { + border: none; +} +.wangEditor-container textarea:focus { + outline: none; +} +.wangEditor-container .height-tip { + position: absolute; + width: 3px; + background-color: #ccc; + left: 0; + transition: top .2s; +} +.wangEditor-container .txt-toolbar { + position: absolute; + background-color: #fff; + padding: 3px 5px; + border-top: 2px solid #666; + box-shadow: 1px 3px 3px #999; + border-left: 1px\9 solid\9 #ccc\9; + border-bottom: 1px\9 solid\9 #999\9; + border-right: 1px\9 solid\9 #999\9; +} +.wangEditor-container .txt-toolbar .tip-triangle { + display: block; + position: absolute; + width: 0; + height: 0; + border: 5px solid; + border-color: transparent transparent #666 transparent; + top: -12px; + left: 50%; + margin-left: -5px; +} +.wangEditor-container .txt-toolbar a { + color: #666; + display: inline-block; + margin: 0 3px; + padding: 5px; + text-decoration: none; + border-radius: 3px; +} +.wangEditor-container .txt-toolbar a:hover { + background-color: #f1f1f1; +} +.wangEditor-container .img-drag-point { + display: block; + position: absolute; + width: 12px; + height: 12px; + border-radius: 50%; + cursor: se-resize; + background-color: #666; + margin-left: -6px; + margin-top: -6px; + box-shadow: 1px 1px 5px #999; +} +.wangEditor-container .wangEditor-upload-progress { + position: absolute; + height: 1px; + background: #1e88e5; + width: 0; + display: none; + -webkit-transition: width .5s; + -o-transition: width .5s; + transition: width .5s; +} +.wangEditor-fullscreen { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +.wangEditor-container .code-textarea { + resize: none; + width: 100%; + font-size: 14px; + line-height: 1.5; + font-family: 'Verdana'; + color: #333; + padding: 0 15px 0 15px; +} +.wangEditor-menu-container { + width: 100%; + border-bottom: 1px solid #f1f1f1; + background-color: #fff; +} +.wangEditor-menu-container a { + text-decoration: none; +} +.wangEditor-menu-container .menu-group { + float: left; + padding: 0 8px; + border-right: 1px solid #f1f1f1; +} +.wangEditor-menu-container .menu-item { + float: left; + position: relative; + text-align: center; + height: 31px; + width: 35px; +} +.wangEditor-menu-container .menu-item:hover { + background-color: #f1f1f1; +} +.wangEditor-menu-container .menu-item a { + display: block; + text-align: center; + color: #666; + width: 100%; + padding: 8px 0; + font-size: 0.9em; +} +.wangEditor-menu-container .menu-item .selected { + color: #1e88e5; +} +.wangEditor-menu-container .menu-item .active { + background-color: #f1f1f1; +} +.wangEditor-menu-container .menu-item .disable { + opacity: 0.5; + filter: alpha(opacity=50); +} +.wangEditor-menu-container .menu-tip { + display: block; + position: absolute; + z-index: 20; + width: 60px; + text-align: center; + background-color: #666; + color: #fff; + padding: 7px 0; + font-size: 12px; + top: 100%; + left: 50%; + margin-left: -30px; + border-radius: 2px; + box-shadow: 1px 1px 5px #999; + display: none; + /*// 小三角 + .tip-triangle { + display: block; + position: absolute; + width: 0; + height: 0; + border:5px solid; + border-color: transparent transparent @fore-color transparent; + top: -10px; + left: 50%; + margin-left: -5px; + }*/ +} +.wangEditor-menu-container .menu-tip-40 { + width: 40px; + margin-left: -20px; +} +.wangEditor-menu-container .menu-tip-50 { + width: 50px; + margin-left: -25px; +} +.wangEditor-menu-shadow { + /*border-bottom-width: 0;*/ + border-bottom: 1px\9 solid\9 #f1f1f1\9; + box-shadow: 0 1px 3px #999; +} +.wangEditor-container .wangEditor-txt { + width: 100%; + text-align: left; + padding: 15px; + padding-top: 0; + margin-top: 5px; + overflow-y: auto; +} +.wangEditor-container .wangEditor-txt p, +.wangEditor-container .wangEditor-txt h1, +.wangEditor-container .wangEditor-txt h2, +.wangEditor-container .wangEditor-txt h3, +.wangEditor-container .wangEditor-txt h4, +.wangEditor-container .wangEditor-txt h5 { + margin: 10px 0; + line-height: 1.8; +} +.wangEditor-container .wangEditor-txt p *, +.wangEditor-container .wangEditor-txt h1 *, +.wangEditor-container .wangEditor-txt h2 *, +.wangEditor-container .wangEditor-txt h3 *, +.wangEditor-container .wangEditor-txt h4 *, +.wangEditor-container .wangEditor-txt h5 * { + line-height: 1.8; +} +.wangEditor-container .wangEditor-txt ul, +.wangEditor-container .wangEditor-txt ol { + padding-left: 20px; +} +.wangEditor-container .wangEditor-txt img { + cursor: pointer; +} +.wangEditor-container .wangEditor-txt img.clicked { + box-shadow: 1px 1px 10px #999; +} +.wangEditor-container .wangEditor-txt table.clicked { + box-shadow: 1px 1px 10px #999; +} +.wangEditor-container .wangEditor-txt pre code { + line-height: 1.5; +} +.wangEditor-container .wangEditor-txt:focus { + outline: none; +} +.wangEditor-container .wangEditor-txt blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; +} +.wangEditor-container .wangEditor-txt table { + border: none; + border-collapse: collapse; +} +.wangEditor-container .wangEditor-txt table td, +.wangEditor-container .wangEditor-txt table th { + border: 1px solid #999; + padding: 3px 5px; + min-width: 50px; + height: 20px; +} +.wangEditor-container .wangEditor-txt pre { + border: 1px solid #ccc; + background-color: #f8f8f8; + padding: 10px; + margin: 5px 0px; + font-size: 0.8em; + border-radius: 3px; +} +.wangEditor-drop-list { + display: none; + position: absolute; + background-color: #fff; + overflow: hidden; + z-index: 10; + transition: height .7s; + border-top: 1px solid #f1f1f1; + box-shadow: 1px 3px 3px #999; + border-left: 1px\9 solid\9 #ccc\9; + border-bottom: 1px\9 solid\9 #999\9; + border-right: 1px\9 solid\9 #999\9; +} +.wangEditor-drop-list a { + text-decoration: none; + display: block; + color: #666; + padding: 3px 5px; +} +.wangEditor-drop-list a:hover { + background-color: #f1f1f1; +} +.wangEditor-drop-panel, +.txt-toolbar { + display: none; + position: absolute; + padding: 10px; + font-size: 14px; + /*border: 1px\9 solid\9 #cccccc\9;*/ + background-color: #fff; + z-index: 10; + border-top: 2px solid #666; + box-shadow: 1px 3px 3px #999; + border-left: 1px\9 solid\9 #ccc\9; + border-bottom: 1px\9 solid\9 #999\9; + border-right: 1px\9 solid\9 #999\9; +} +.wangEditor-drop-panel .tip-triangle, +.txt-toolbar .tip-triangle { + display: block; + position: absolute; + width: 0; + height: 0; + border: 5px solid; + border-color: transparent transparent #666 transparent; + top: -12px; + left: 50%; + margin-left: -5px; +} +.wangEditor-drop-panel a, +.txt-toolbar a { + text-decoration: none; +} +.wangEditor-drop-panel input[type=text], +.txt-toolbar input[type=text] { + border: none; + border-bottom: 1px solid #ccc; + font-size: 14px; + height: 20px; + color: #333; + padding: 3px 0; +} +.wangEditor-drop-panel input[type=text]:focus, +.txt-toolbar input[type=text]:focus { + outline: none; + border-bottom: 2px solid #1e88e5; +} +.wangEditor-drop-panel input[type=text].block, +.txt-toolbar input[type=text].block { + display: block; + width: 100%; +} +.wangEditor-drop-panel textarea, +.txt-toolbar textarea { + border: 1px solid #ccc; +} +.wangEditor-drop-panel textarea:focus, +.txt-toolbar textarea:focus { + outline: none; + border-color: #1e88e5; +} +.wangEditor-drop-panel button, +.txt-toolbar button { + font-size: 14px; + color: #1e88e5; + border: none; + padding: 10px; + background-color: #fff; + cursor: pointer; + border-radius: 3px; +} +.wangEditor-drop-panel button:hover, +.txt-toolbar button:hover { + background-color: #f1f1f1; +} +.wangEditor-drop-panel button:focus, +.txt-toolbar button:focus { + outline: none; +} +.wangEditor-drop-panel button.right, +.txt-toolbar button.right { + float: right; + margin-left: 10px; +} +.wangEditor-drop-panel button.gray, +.txt-toolbar button.gray { + color: #999; +} +.wangEditor-drop-panel button.link, +.txt-toolbar button.link { + padding: 5px 10px; +} +.wangEditor-drop-panel button.link:hover, +.txt-toolbar button.link:hover { + background-color: #fff; + text-decoration: underline; +} +.wangEditor-drop-panel .color-item, +.txt-toolbar .color-item { + display: block; + float: left; + width: 25px; + height: 25px; + text-align: center; + padding: 2px; + border-radius: 2px; + text-decoration: underline; +} +.wangEditor-drop-panel .color-item:hover, +.txt-toolbar .color-item:hover { + background-color: #f1f1f1; +} +.wangEditor-drop-panel .list-menu-item, +.txt-toolbar .list-menu-item { + display: block; + float: left; + color: #333; + padding: 5px 5px; + border-radius: 2px; +} +.wangEditor-drop-panel .list-menu-item:hover, +.txt-toolbar .list-menu-item:hover { + background-color: #f1f1f1; +} +.wangEditor-drop-panel table.choose-table, +.txt-toolbar table.choose-table { + border: none; + border-collapse: collapse; +} +.wangEditor-drop-panel table.choose-table td, +.txt-toolbar table.choose-table td { + border: 1px solid #ccc; + width: 16px; + height: 12px; +} +.wangEditor-drop-panel table.choose-table td.active, +.txt-toolbar table.choose-table td.active { + background-color: #ccc; + opacity: .5; + filter: alpha(opacity=50); +} +.wangEditor-drop-panel .panel-tab .tab-container, +.txt-toolbar .panel-tab .tab-container { + margin-bottom: 5px; +} +.wangEditor-drop-panel .panel-tab .tab-container a, +.txt-toolbar .panel-tab .tab-container a { + display: inline-block; + color: #999; + text-align: center; + margin: 0 5px; + padding: 5px 5px; +} +.wangEditor-drop-panel .panel-tab .tab-container a.selected, +.txt-toolbar .panel-tab .tab-container a.selected { + color: #1e88e5; + border-bottom: 2px solid #1e88e5; +} +.wangEditor-drop-panel .panel-tab .content-container .content, +.txt-toolbar .panel-tab .content-container .content { + display: none; +} +.wangEditor-drop-panel .panel-tab .content-container .content a, +.txt-toolbar .panel-tab .content-container .content a { + display: inline-block; + margin: 2px; + padding: 2px; + border-radius: 2px; +} +.wangEditor-drop-panel .panel-tab .content-container .content a:hover, +.txt-toolbar .panel-tab .content-container .content a:hover { + background-color: #f1f1f1; +} +.wangEditor-drop-panel .panel-tab .content-container .selected, +.txt-toolbar .panel-tab .content-container .selected { + display: block; +} +.wangEditor-drop-panel .panel-tab .emotion-content-container, +.txt-toolbar .panel-tab .emotion-content-container { + height: 200px; + overflow-y: auto; +} +.wangEditor-drop-panel .upload-icon-container, +.txt-toolbar .upload-icon-container { + color: #ccc; + text-align: center; + margin: 20px 20px 15px 20px !important; + padding: 5px !important; + font-size: 65px; + cursor: pointer; + border: 2px dotted #f1f1f1; + display: block !important; +} +.wangEditor-drop-panel .upload-icon-container:hover, +.txt-toolbar .upload-icon-container:hover { + color: #666; + border-color: #ccc; +} +.wangEditor-modal { + position: absolute; + top: 50%; + left: 50%; + background-color: #fff; + border-top: 1px solid #f1f1f1; + box-shadow: 1px 3px 3px #999; + border-top: 1px\9 solid\9 #ccc\9; + border-left: 1px\9 solid\9 #ccc\9; + border-bottom: 1px\9 solid\9 #999\9; + border-right: 1px\9 solid\9 #999\9; +} +.wangEditor-modal .wangEditor-modal-close { + position: absolute; + top: 0; + right: 0; + margin-top: -25px; + margin-right: -25px; + font-size: 1.5em; + color: #666; + cursor: pointer; +} +/*@font-face {*/ + /*font-family: 'icomoon';*/ + /*src: url('../fonts/icomoon.eot?-qdfu1s');*/ + /*src: url('../fonts/icomoon.eot?#iefix-qdfu1s') format('embedded-opentype'), url('../fonts/icomoon.ttf?-qdfu1s') format('truetype'), url('../fonts/icomoon.woff?-qdfu1s') format('woff'), url('../fonts/icomoon.svg?-qdfu1s#icomoon') format('svg');*/ + /*font-weight: normal;*/ + /*font-style: normal;*/ +/*}*/ +[class^="wangeditor-menu-img-"], +[class*=" wangeditor-menu-img-"] { + font-family: 'icomoon'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.wangeditor-menu-img-link:before { + content: "\e800"; +} +.wangeditor-menu-img-unlink:before { + content: "\e801"; +} +.wangeditor-menu-img-code:before { + content: "\e802"; +} +.wangeditor-menu-img-cancel:before { + content: "\e803"; +} +.wangeditor-menu-img-terminal:before { + content: "\e804"; +} +.wangeditor-menu-img-angle-down:before { + content: "\e805"; +} +.wangeditor-menu-img-font:before { + content: "\e806"; +} +.wangeditor-menu-img-bold:before { + content: "\e807"; +} +.wangeditor-menu-img-italic:before { + content: "\e808"; +} +.wangeditor-menu-img-header:before { + content: "\e809"; +} +.wangeditor-menu-img-align-left:before { + content: "\e80a"; +} +.wangeditor-menu-img-align-center:before { + content: "\e80b"; +} +.wangeditor-menu-img-align-right:before { + content: "\e80c"; +} +.wangeditor-menu-img-list-bullet:before { + content: "\e80d"; +} +.wangeditor-menu-img-indent-left:before { + content: "\e80e"; +} +.wangeditor-menu-img-indent-right:before { + content: "\e80f"; +} +.wangeditor-menu-img-list-numbered:before { + content: "\e810"; +} +.wangeditor-menu-img-underline:before { + content: "\e811"; +} +.wangeditor-menu-img-table:before { + content: "\e812"; +} +.wangeditor-menu-img-eraser:before { + content: "\e813"; +} +.wangeditor-menu-img-text-height:before { + content: "\e814"; +} +.wangeditor-menu-img-brush:before { + content: "\e815"; +} +.wangeditor-menu-img-pencil:before { + content: "\e816"; +} +.wangeditor-menu-img-minus:before { + content: "\e817"; +} +.wangeditor-menu-img-picture:before { + content: "\e818"; +} +.wangeditor-menu-img-file-image:before { + content: "\e819"; +} +.wangeditor-menu-img-cw:before { + content: "\e81a"; +} +.wangeditor-menu-img-ccw:before { + content: "\e81b"; +} +.wangeditor-menu-img-music:before { + content: "\e911"; +} +.wangeditor-menu-img-play:before { + content: "\e912"; +} +.wangeditor-menu-img-location:before { + content: "\e947"; +} +.wangeditor-menu-img-happy:before { + content: "\e9df"; +} +.wangeditor-menu-img-sigma:before { + content: "\ea67"; +} +.wangeditor-menu-img-enlarge2:before { + content: "\e98b"; +} +.wangeditor-menu-img-shrink2:before { + content: "\e98c"; +} +.wangeditor-menu-img-newspaper:before { + content: "\e904"; +} +.wangeditor-menu-img-camera:before { + content: "\e90f"; +} +.wangeditor-menu-img-video-camera:before { + content: "\e914"; +} +.wangeditor-menu-img-file-zip:before { + content: "\e92b"; +} +.wangeditor-menu-img-stack:before { + content: "\e92e"; +} +.wangeditor-menu-img-credit-card:before { + content: "\e93f"; +} +.wangeditor-menu-img-address-book:before { + content: "\e944"; +} +.wangeditor-menu-img-envelop:before { + content: "\e945"; +} +.wangeditor-menu-img-drawer:before { + content: "\e95c"; +} +.wangeditor-menu-img-download:before { + content: "\e960"; +} +.wangeditor-menu-img-upload:before { + content: "\e961"; +} +.wangeditor-menu-img-lock:before { + content: "\e98f"; +} +.wangeditor-menu-img-unlocked:before { + content: "\e990"; +} +.wangeditor-menu-img-wrench:before { + content: "\e991"; +} +.wangeditor-menu-img-eye:before { + content: "\e9ce"; +} +.wangeditor-menu-img-eye-blocked:before { + content: "\e9d1"; +} +.wangeditor-menu-img-command:before { + content: "\ea4e"; +} +.wangeditor-menu-img-font2:before { + content: "\ea5c"; +} +.wangeditor-menu-img-libreoffice:before { + content: "\eade"; +} +.wangeditor-menu-img-quotes-left:before { + content: "\e977"; +} +.wangeditor-menu-img-strikethrough:before { + content: "\ea65"; +} +.wangeditor-menu-img-desktop:before { + content: "\f108"; +} +.wangeditor-menu-img-tablet:before { + content: "\f10a"; +} +.wangeditor-menu-img-search-plus:before { + content: "\f00e"; +} +.wangeditor-menu-img-search-minus:before { + content: "\f010"; +} +.wangeditor-menu-img-trash-o:before { + content: "\f014"; +} +.wangeditor-menu-img-align-justify:before { + content: "\f039"; +} +.wangeditor-menu-img-arrows-v:before { + content: "\f07d"; +} +.wangeditor-menu-img-sigma2:before { + content: "\ea68"; +} +.wangeditor-menu-img-omega:before { + content: "\e900"; +} +.wangeditor-menu-img-cancel-circle:before { + content: "\e901"; +} +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; + -webkit-text-size-adjust: none; +} +.hljs-comment, +.diff .hljs-header { + color: #998; + font-style: italic; +} +.hljs-keyword, +.css .rule .hljs-keyword, +.hljs-winutils, +.nginx .hljs-title, +.hljs-subst, +.hljs-request, +.hljs-status { + color: #333; + font-weight: bold; +} +.hljs-number, +.hljs-hexcolor, +.ruby .hljs-constant { + color: #008080; +} +.hljs-string, +.hljs-tag .hljs-value, +.hljs-doctag, +.tex .hljs-formula { + color: #d14; +} +.hljs-title, +.hljs-id, +.scss .hljs-preprocessor { + color: #900; + font-weight: bold; +} +.hljs-list .hljs-keyword, +.hljs-subst { + font-weight: normal; +} +.hljs-class .hljs-title, +.hljs-type, +.vhdl .hljs-literal, +.tex .hljs-command { + color: #458; + font-weight: bold; +} +.hljs-tag, +.hljs-tag .hljs-title, +.hljs-rule .hljs-property, +.django .hljs-tag .hljs-keyword { + color: #000080; + font-weight: normal; +} +.hljs-attribute, +.hljs-variable, +.lisp .hljs-body, +.hljs-name { + color: #008080; +} +.hljs-regexp { + color: #009926; +} +.hljs-symbol, +.ruby .hljs-symbol .hljs-string, +.lisp .hljs-keyword, +.clojure .hljs-keyword, +.scheme .hljs-keyword, +.tex .hljs-special, +.hljs-prompt { + color: #990073; +} +.hljs-built_in { + color: #0086b3; +} +.hljs-preprocessor, +.hljs-pragma, +.hljs-pi, +.hljs-doctype, +.hljs-shebang, +.hljs-cdata { + color: #999; + font-weight: bold; +} +.hljs-deletion { + background: #fdd; +} +.hljs-addition { + background: #dfd; +} +.diff .hljs-change { + background: #0086b3; +} +.hljs-chunk { + color: #aaa; +} diff --git a/src/assets/css/wangEditorTxt.css b/src/assets/css/wangEditorTxt.css new file mode 100644 index 0000000..da59627 --- /dev/null +++ b/src/assets/css/wangEditorTxt.css @@ -0,0 +1,72 @@ +.wangEditor-txt { + width: 100%; + text-align: left; + padding: 15px; + padding-top: 0; + margin-top: 5px; + overflow-y: auto; +} +.wangEditor-txt p, +.wangEditor-txt h1, +.wangEditor-txt h2, +.wangEditor-txt h3, +.wangEditor-txt h4, +.wangEditor-txt h5 { + margin: 10px 0; + line-height: 1.8; +} +.wangEditor-txt p *, +.wangEditor-txt h1 *, +.wangEditor-txt h2 *, +.wangEditor-txt h3 *, +.wangEditor-txt h4 *, +.wangEditor-txt h5 * { + line-height: 1.8; +} +.wangEditor-txt ul, +.wangEditor-txt ol { + padding-left: 20px; +} +.wangEditor-txt img { + cursor: pointer; +} +.wangEditor-txt img.clicked { + box-shadow: 1px 1px 10px #999; +} +.wangEditor-txt table.clicked { + box-shadow: 1px 1px 10px #999; +} +.wangEditor-txt pre code { + line-height: 1.5; +} +.wangEditor-txt:focus { + outline: none; +} +.wangEditor-txt blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; +} +.wangEditor-txt table { + border: none; + border-collapse: collapse; +} +.wangEditor-txt table td, +.wangEditor-txt table th { + border: 1px solid #999; + padding: 3px 5px; + min-width: 50px; + height: 20px; +} +.wangEditor-txt pre { + border: 1px solid #ccc; + background-color: #f8f8f8; + padding: 10px; + margin: 5px 0px; + font-size: 0.8em; + border-radius: 3px; +} diff --git a/src/assets/icon/iconfont.css b/src/assets/icon/iconfont.css new file mode 100644 index 0000000..4085f6c --- /dev/null +++ b/src/assets/icon/iconfont.css @@ -0,0 +1,47 @@ + +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1496642611968'); /* IE9*/ + src: url('iconfont.eot?t=1496642611968#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('iconfont.woff?t=1496642611968') format('woff'), /* chrome, firefox */ + url('iconfont.ttf?t=1496642611968') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('iconfont.svg?t=1496642611968#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-img:before { content: "\e657"; } + +.icon-excel:before { content: "\e61c"; } + +.icon-word:before { content: "\e61f"; } + +.icon-file:before { content: "\e689"; } + +.icon-js:before { content: "\e6b2"; } + +.icon-MP:before { content: "\e670"; } + +.icon-txt:before { content: "\e668"; } + +.icon-file_csv:before { content: "\e724"; } + +.icon-file_ppt:before { content: "\e726"; } + +.icon-file_word:before { content: "\e729"; } + +.icon-pdf:before { content: "\e72c"; } + +.icon-zip:before { content: "\e661"; } + +.icon-rar:before { content: "\e662"; } + +.icon-file_css:before { content: "\e6bd"; } + +.icon-file_video:before { content: "\e6bf"; } + diff --git a/src/assets/icon/iconfont.eot b/src/assets/icon/iconfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..90eabed29486441c2904fc8ee1b2549461f51900 GIT binary patch literal 12934 zcmd6N3v^t^dEU&O``*3#y8B){?(W4dUb`TG#ft<9F7cvB03--LfTbuJARZ(oQlv?W zq-4pVWyuzyxK0yWjuWSr^{}0&vMxkRm15aq(w-ijG>YAmxTmdqPUFU*EZ1pIYgcMg z0_-<;0g9w#Teg*+-rYO%&&+>k=Ktsa|M~y9_Y>`e9BU(l5`pkbATo0S)cllkXms4o z2nkf`Id0`T^1b`sTB~~}50Il|mYg7WlLa?DgC;K-BlBbqE%%V)C@+$ID4!yyQNuAU z(neZHE9nJv2EPR|1I#mMI|7Wm0a>JhoCQV;Sx-7hBgzGG3~7%GokH4)R$jXmX*=Lb z={!npc!IZ_Lz+Q*#w{(l>1oX7y=IJR%A1gggbWYw89Vzwf82#iFKVl{4h{{I5|L4E zK-t>4dtLkF)c!t{Z$o+C?D3hC{8kjAa~N`7t5&akSShoIHHI_3eN5 zS(G;tqCIwa=JZL_gTwWl%j)4{_b!C~y(dHnJAm#(N9Jedj8{H2O^D6$x{jbi`F-{v z%3npf?#S^o=l$OkuA%(rD7PLvF+0=k+w?5TS5a;_K6Cyg{l5Mapw^*m-92-BzUsFp zzmD=C*1X~5iPLAE+xh$dnULHuv_En3)cnb(U;fqty80`WF;ABp+ ++ ++ ?nIq)4?JB@S(rlfQP2FAU9r z%je(7vkTWQkOS;v