@@ -5,10 +5,13 @@ VUE_APP_TITLE = 农燊高科 | |||||
ENV = 'development' | ENV = 'development' | ||||
# 农燊高科/开发环境 | # 农燊高科/开发环境 | ||||
VUE_APP_BASE_API = '/dev-api' | |||||
VUE_APP_BASE_API = '/api' | |||||
# 路由懒加载 | # 路由懒加载 | ||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true | VUE_CLI_BABEL_TRANSPILE_MODULES = true | ||||
port = 81 | |||||
API_HOST = 'http://localhost:8081' | |||||
# 登录账密凭据加密 | # 登录账密凭据加密 | ||||
VUE_APP_ENABLE_SECRET=true | VUE_APP_ENABLE_SECRET=true |
@@ -5,4 +5,4 @@ VUE_APP_TITLE = 农燊高科 | |||||
ENV = 'production' | ENV = 'production' | ||||
# 农燊高科/生产环境 | # 农燊高科/生产环境 | ||||
VUE_APP_BASE_API = '/prod-api' | |||||
VUE_APP_BASE_API = '/api' |
@@ -7,4 +7,4 @@ NODE_ENV = production | |||||
ENV = 'staging' | ENV = 'staging' | ||||
# 农燊高科/测试环境 | # 农燊高科/测试环境 | ||||
VUE_APP_BASE_API = '/stage-api' | |||||
VUE_APP_BASE_API = '/api' |
@@ -21,3 +21,5 @@ selenium-debug.log | |||||
package-lock.json | package-lock.json | ||||
yarn.lock | yarn.lock | ||||
dist.* |
@@ -0,0 +1,19 @@ | |||||
import request from '@/utils/request' | |||||
// 任务 | |||||
export function taskList(params) { | |||||
return request({ | |||||
url: '/agentcenter/task/taskList', | |||||
method: 'get', | |||||
params: params, | |||||
}) | |||||
} | |||||
// 待处理任务 | |||||
export function todoTaskList(params) { | |||||
return request({ | |||||
url: '/accounting/task/todoTaskList', | |||||
method: 'get', | |||||
params: params, | |||||
}) | |||||
} |
@@ -55,7 +55,7 @@ export function logout() { | |||||
// 获取验证码 | // 获取验证码 | ||||
export function getCodeImg() { | export function getCodeImg() { | ||||
return request({ | return request({ | ||||
url: '/gkyzm', | |||||
url: '/captchaImage', | |||||
headers: { | headers: { | ||||
isToken: false | isToken: false | ||||
}, | }, | ||||
@@ -0,0 +1,19 @@ | |||||
import request from '@/utils/request' | |||||
// 部门树 | |||||
export function deptTree(params) { | |||||
return request({ | |||||
url: '/misc/dept/tree', | |||||
method: 'get', | |||||
params: params, | |||||
}) | |||||
} | |||||
// 部门树(市级) | |||||
export function cityTree(params) { | |||||
return request({ | |||||
url: '/misc/dept/cityTree', | |||||
method: 'get', | |||||
params: params, | |||||
}) | |||||
} |
@@ -88,7 +88,7 @@ export const constantRoutes = [ | |||||
} | } | ||||
] | ] | ||||
}, | }, | ||||
//待处理 | |||||
/* //待处理 | |||||
{ | { | ||||
path: '/todo', | path: '/todo', | ||||
component: () => import('@/views/taskAllocation/todo'), | component: () => import('@/views/taskAllocation/todo'), | ||||
@@ -105,7 +105,7 @@ export const constantRoutes = [ | |||||
path: '/abnormal', | path: '/abnormal', | ||||
component: () => import('@/views/abnormal/abnormal'), | component: () => import('@/views/abnormal/abnormal'), | ||||
hidden: true | hidden: true | ||||
}, | |||||
},*/ | |||||
//处理中 | //处理中 | ||||
{ | { | ||||
path: '/processing', | path: '/processing', | ||||
@@ -0,0 +1,523 @@ | |||||
/** | |||||
* 支持的时间日期格式占位符: | |||||
* 支持通用占位符和MySQL占位符(可以混合) | |||||
* 格式化时以下都支持, 解析时不支持星期几 | |||||
* 不支持时区, 保留z Z zz ZZ zzz ZZZ zzzz ZZZZ %z %Z | |||||
* | |||||
* 4位年: yyyy %Y | |||||
* 2位年: yy %y | |||||
* 2位月: MM %m | |||||
* 数字月: M %c | |||||
* 英文月: MMMM %M | |||||
* 简写英文月: MMM %b | |||||
* 2位日: dd %d | |||||
* 数字日: d | |||||
* 2位时(24): HH %H | |||||
* 数字时(24): H %k | |||||
* 2位时(12): hh %I %h | |||||
* 数字时(12): h %l | |||||
* 2位分: mm ii %i | |||||
* 数字分: m i | |||||
* 2位秒: ss %s %S | |||||
* 数字秒: s | |||||
* 3位毫秒: sss | |||||
* 小写上下午(AM/PM): a p | |||||
* 大写上下午(AM/PM): A P %p | |||||
* 星期几(周一为1, 周日为7): u | |||||
* 星期几(周日为0): %w | |||||
* 英文星期几: dddd %W | |||||
* 简写英文星期几: ddd %a | |||||
* %: %% // MySQL特殊占位符% | |||||
*/ | |||||
// Eng/lish | |||||
const DATE_TIME_FORMAT_TYPE_IGNORE = 'ign'; | |||||
const DATE_TIME_FORMAT_TYPE_EXPRESSION = 'exp'; | |||||
const DATE_TIME_FORMAT_TYPE_RAW = 'raw'; | |||||
const DAYS_SIMPLE = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']; | |||||
const DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; | |||||
const MONTHS_SIMPLE = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; | |||||
const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | |||||
function parseDateTimeFormatter(format) | |||||
{ | |||||
let expect = function(target, str, range) { | |||||
let i = 0; | |||||
if(!range) | |||||
range = 1; | |||||
if(!Array.isArray(range)) | |||||
{ | |||||
let arr = []; | |||||
for(let m = 1; m <= range; m++) | |||||
arr.push(m); | |||||
range = arr; | |||||
} | |||||
let res = 0; | |||||
let max = Math.max(...range); | |||||
let min = Math.min(...range); | |||||
while(i < str.length) | |||||
{ | |||||
let ch = str[i++]; | |||||
if(target.indexOf(ch) === -1) | |||||
break; | |||||
if(range.indexOf(i) === -1) | |||||
{ | |||||
if(i >= max) | |||||
break; | |||||
} | |||||
if(range.indexOf(i) !== -1) | |||||
res = i; | |||||
} | |||||
if(res > 0) | |||||
{ | |||||
return res; | |||||
} | |||||
return false; | |||||
}; | |||||
let i = 0; | |||||
let arr = []; | |||||
while(i < format.length) | |||||
{ | |||||
let ch = format[i]; | |||||
let n = false; | |||||
switch(ch) | |||||
{ | |||||
case 'y': | |||||
n = expect('y', format.substr(i), [2, 4]); | |||||
break; | |||||
case 'M': | |||||
n = expect('M', format.substr(i), 4); | |||||
break; | |||||
case 'd': | |||||
n = expect('d', format.substr(i), 4); | |||||
break; | |||||
case 'H': | |||||
case 'h': | |||||
n = expect(ch, format.substr(i), 2); | |||||
break; | |||||
case 'm': | |||||
case 'i': | |||||
n = expect(ch, format.substr(i), 2); | |||||
break; | |||||
case 's': | |||||
n = expect('s', format.substr(i), 3); | |||||
break; | |||||
case 'a': | |||||
case 'p': | |||||
case 'A': | |||||
case 'P': | |||||
case 'u': | |||||
n = expect(ch, format.substr(i)); | |||||
break; | |||||
case 'z': | |||||
case 'Z': | |||||
n = expect(ch, format.substr(i), 4); | |||||
break; | |||||
case '%': | |||||
n = expect('YmdHisSyecklIh%zZ', format.substr(i + 1)); | |||||
if(n === 1) | |||||
n++; | |||||
break; | |||||
default: | |||||
arr.push({str: ch, type: DATE_TIME_FORMAT_TYPE_RAW}); | |||||
i++; | |||||
continue; | |||||
} | |||||
if(n) | |||||
{ | |||||
let s = format.substr(i, n); | |||||
let ignore = ['z', 'zz', 'zzz', 'zzzz', 'Z', 'ZZ', 'ZZZ', 'ZZZZ', '%z', '%Z'].indexOf(s) !== -1; | |||||
arr.push({str: s, type: ignore ? DATE_TIME_FORMAT_TYPE_IGNORE : DATE_TIME_FORMAT_TYPE_EXPRESSION}); | |||||
i += n; | |||||
} | |||||
else | |||||
{ | |||||
arr.push({str: format.substr(i), type: DATE_TIME_FORMAT_TYPE_RAW}); | |||||
break; | |||||
} | |||||
} | |||||
return arr; | |||||
} | |||||
/** | |||||
* 格式化日期时间 | |||||
* @param date 日期时间 Date对象/时间戳 默认当前日期时间 | |||||
* @param format 格式化字符串 字符串 默认 yyyy-MM-dd HH:mm:ss | |||||
* @returns {string} 日期时间格式化后的字符串 | |||||
*/ | |||||
export function date_format(date, format) { | |||||
if(arguments.length === 1) | |||||
{ | |||||
format = date; | |||||
date = null; | |||||
} | |||||
if (!date) | |||||
date = new Date; | |||||
else if(!date instanceof Date) | |||||
date = new Date(date); | |||||
format = format || 'yyyy-MM-dd HH:mm:ss'; | |||||
let numpad = function(num, limit) { | |||||
limit = limit || 10; | |||||
if(num >= limit) | |||||
return num; | |||||
let res = num; | |||||
while(num < limit && limit >= 10) | |||||
{ | |||||
res = '0' + res; | |||||
limit /= 10; | |||||
} | |||||
return res; | |||||
} | |||||
const _y = date.getFullYear(); | |||||
const _m = date.getMonth() + 1; | |||||
const _d = date.getDate(); | |||||
const _h = date.getHours(); | |||||
const _i = date.getMinutes(); | |||||
const _s = date.getSeconds(); | |||||
const _a = date.getDay(); | |||||
const _z = date.getMilliseconds(); | |||||
// General style | |||||
let Options = { | |||||
yyyy: _y, | |||||
MM: numpad(_m), | |||||
dd: numpad(_d), | |||||
HH: numpad(_h), | |||||
mm: numpad(_i), | |||||
ss: numpad(_s), | |||||
sss: numpad(_z, 100), | |||||
yy: _y % 100, | |||||
M: _m, | |||||
d: _d, | |||||
H: _h, | |||||
m: _i, | |||||
s: _s, | |||||
hh: numpad((_h % 12) || 12), | |||||
h: (_h % 12) || 12, | |||||
// Qt style | |||||
ddd: DAYS_SIMPLE[_a - 1], | |||||
dddd: DAYS[_a - 1], | |||||
MMM: MONTHS_SIMPLE[_m - 1], | |||||
MMMM: MONTHS[_m - 1], | |||||
// Java style | |||||
a: _h > 12 ? 'pm' : 'am', | |||||
A: _h > 12 ? 'PM' : 'AM', | |||||
u: _a, | |||||
}; | |||||
Options['p'] = Options.a; | |||||
Options['P'] = Options.A; | |||||
// PHP style | |||||
Options['ii'] = Options.mm; | |||||
Options['i'] = Options.m; | |||||
// MySQL style | |||||
Options['%Y'] = Options.yyyy; | |||||
Options['%m'] = Options.MM; | |||||
Options['%d'] = Options.dd; | |||||
Options['%H'] = Options.HH; | |||||
Options['%i'] = Options.mm; | |||||
Options['%s'] = Options.ss; | |||||
Options['%S'] = Options.ss; | |||||
Options['%y'] = Options.yy; | |||||
Options['%e'] = Options.d; | |||||
Options['%c'] = Options.M; | |||||
Options['%k'] = Options.H; | |||||
Options['%l'] = Options.h; | |||||
Options['%I'] = Options.hh; | |||||
Options['%h'] = Options.hh; | |||||
Options['%p'] = Options.A; | |||||
Options['%w'] = Options.u - 1; | |||||
Options['%a'] = Options.ddd; | |||||
Options['%W'] = Options.dddd; | |||||
Options['%M'] = Options.MMMM; | |||||
Options['%b'] = Options.MMM; | |||||
Options['%%'] = '%'; | |||||
let arr = parseDateTimeFormatter(format); | |||||
//console.log(arr); | |||||
arr = arr.filter((x) => x.type !== DATE_TIME_FORMAT_TYPE_IGNORE).map((x) => { | |||||
return x.type === DATE_TIME_FORMAT_TYPE_EXPRESSION ? (Options[x.str] || x.str) : x.str; | |||||
}) | |||||
//console.log(format, '|', arr.join('')); | |||||
return arr.join(''); | |||||
} | |||||
/** | |||||
* 解析日期时间 | |||||
* @param date 日期时间字符串 字符串 | |||||
* @param format 格式化字符串 字符串 默认 yyyy-MM-dd HH:mm:ss | |||||
* @param initNow 缺省部分是否使用当前日期时间部分代替 bool 默认不使用当前 | |||||
* @returns {Date} 解析日期时间出来的Date对象 | |||||
*/ | |||||
export function strtotime(date, format, initNow) | |||||
{ | |||||
if (!date) | |||||
return null; | |||||
let expect = function(target, str) { | |||||
if(Array.isArray(target)) | |||||
{ | |||||
let res = 0; | |||||
if(typeof(target[0]) === 'number') | |||||
{ | |||||
for(let t of target) | |||||
{ | |||||
if(str.length >= t) | |||||
{ | |||||
if(t > res && new RegExp(`^\\d{${t}}`).test(str)) | |||||
res = t; | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
for(let t of target) | |||||
{ | |||||
if(str.length < t.length) | |||||
continue; | |||||
if(str.startsWith(t)) | |||||
{ | |||||
res = t.length; | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
return res; | |||||
} | |||||
else | |||||
{ | |||||
if(typeof(target) === 'number') | |||||
{ | |||||
if(str.length < target) | |||||
return 0; | |||||
if(!new RegExp(`^\\d{${target}}`).test(str)) | |||||
return null; | |||||
return target; | |||||
} | |||||
else if(typeof(target) === 'object') | |||||
{ | |||||
let res = 0; | |||||
let min = target.min || 0; | |||||
let max = target.max; | |||||
for(let m = min; m <= max; m++) | |||||
{ | |||||
let t = '' + m; | |||||
if(str.length >= t.length) | |||||
{ | |||||
if(str.startsWith(t)) | |||||
res = t.length; | |||||
} | |||||
} | |||||
return res; | |||||
} | |||||
else | |||||
{ | |||||
if(str.length < target.length) | |||||
return 0; | |||||
if(!str.startsWith(target)) | |||||
return 0; | |||||
return target.length; | |||||
} | |||||
} | |||||
}; | |||||
format = format || 'yyyy-MM-dd HH:mm:ss'; | |||||
let arr = parseDateTimeFormatter(format); | |||||
let i = 0; | |||||
let _y = undefined; | |||||
let _m = undefined; | |||||
let _d = undefined; | |||||
let _h = undefined; | |||||
let _i = undefined; | |||||
let _s = undefined; | |||||
let _z = undefined; | |||||
let _h_12 = undefined; | |||||
let _ap = undefined; | |||||
let get_token = function(str, target) { | |||||
let r = expect(target, date.substr(i)); | |||||
if(r <= 0) | |||||
return null; | |||||
let nstr = date.substr(i, r); | |||||
i += r; | |||||
return nstr; | |||||
}; | |||||
//console.log(arr); | |||||
for(let part of arr) | |||||
{ | |||||
if(part.type === DATE_TIME_FORMAT_TYPE_RAW || part.type === DATE_TIME_FORMAT_TYPE_IGNORE) | |||||
{ | |||||
let r = expect(part.str, date.substr(i)); | |||||
if(!r) | |||||
return null; | |||||
i += r; | |||||
} | |||||
else | |||||
{ | |||||
let p = null; | |||||
switch(part.str) | |||||
{ | |||||
case 'yyyy': | |||||
case '%Y': | |||||
p = get_token(part.str, 4); | |||||
if(p) | |||||
_y = parseInt(p); | |||||
break; | |||||
case 'yy': | |||||
case '%y': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_y = Math.floor((date.getFullYear()) / 100) * 100 + parseInt(p); | |||||
break; | |||||
case 'MM': | |||||
case '%m': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_m = parseInt(p); | |||||
break; | |||||
case 'M': | |||||
case '%c': | |||||
p = get_token(part.str, {min: 1, max: 12}); | |||||
if(p) | |||||
_m = parseInt(p); | |||||
break; | |||||
case 'MMMM': | |||||
case '%M': | |||||
p = get_token(part.str, MONTHS); | |||||
if(p) | |||||
_m = MONTHS.indexOf(p) + 1; | |||||
break; | |||||
case 'MMM': | |||||
case '%b': | |||||
p = get_token(part.str, MONTHS_SIMPLE); | |||||
if(p) | |||||
_m = MONTHS_SIMPLE.indexOf(p) + 1; | |||||
break; | |||||
case 'dd': | |||||
case '%d': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_d = parseInt(p); | |||||
break; | |||||
case 'd': | |||||
case '%e': | |||||
p = get_token(part.str, {min: 1, max: 31}); | |||||
if(p) | |||||
_d = parseInt(p); | |||||
break; | |||||
case 'HH': | |||||
case '%H': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_h = parseInt(p); | |||||
break; | |||||
case 'H': | |||||
case '%k': | |||||
p = get_token(part.str, {max: 23}); | |||||
if(p) | |||||
_h = parseInt(p); | |||||
break; | |||||
case 'hh': | |||||
case '%I': | |||||
case '%h': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_h_12 = parseInt(p); | |||||
break; | |||||
case 'h': | |||||
case '%l': | |||||
p = get_token(part.str, {max: 12}); | |||||
if(p) | |||||
_h_12 = parseInt(p); | |||||
break; | |||||
case 'mm': | |||||
case 'ii': | |||||
case '%i': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_i = parseInt(p); | |||||
break; | |||||
case 'm': | |||||
case 'i': | |||||
p = get_token(part.str, {max: 59}); | |||||
if(p) | |||||
_i = parseInt(p); | |||||
break; | |||||
case 'ss': | |||||
case '%s': | |||||
case '%S': | |||||
p = get_token(part.str, 2); | |||||
if(p) | |||||
_s = parseInt(p); | |||||
break; | |||||
case 's': | |||||
p = get_token(part.str, {max: 59}); | |||||
if(p) | |||||
_s = parseInt(p); | |||||
break; | |||||
case 'sss': | |||||
p = get_token(part.str, {max: 999}); | |||||
if(p) | |||||
_z = parseInt(p); | |||||
break; | |||||
case 'A': | |||||
case 'p': { | |||||
const AP = ['AM', 'PM']; | |||||
p = get_token(part.str, AP); | |||||
if(p) | |||||
_ap = p.toLowerCase(); | |||||
} | |||||
break; | |||||
case 'a': | |||||
case 'P': | |||||
case '%p':{ | |||||
const AP = ['am', 'pm']; | |||||
p = get_token(part.str, AP); | |||||
if(p) | |||||
_ap = p; | |||||
} | |||||
break; | |||||
case 'u': | |||||
case '%w': | |||||
case '%W': | |||||
case 'dddd': | |||||
case 'ddd': | |||||
throw new Error('不支持星期几解析: ' + part.str); // not ignore and throw | |||||
//break; | |||||
case '%%': | |||||
//TODO: ignore 最好不解析出来 | |||||
break; | |||||
default: | |||||
throw new Error('不支持的格式解析: ' + part.str); | |||||
break; | |||||
} | |||||
if(!p) | |||||
return null; | |||||
} | |||||
} | |||||
if(_h_12 !== undefined && _ap !== undefined) | |||||
{ | |||||
_h = (_ap === 'pm' ? _h_12 + 12 : _h_12) % 24; | |||||
} | |||||
let res = new Date; | |||||
//console.log('1111111111',_y, _m, _d, _h, _i, _s, _z); | |||||
if(_y === undefined) _y = initNow ? res.getFullYear() : 0; | |||||
if(_m === undefined) _m = initNow ? res.getMonth() + 1 : 1; | |||||
if(_d === undefined) _d = initNow ? res.getDate() : 1; | |||||
if(_h === undefined) _h = initNow ? res.getHours() : 0; | |||||
if(_i === undefined) _i = initNow ? res.getMinutes() : 0; | |||||
if(_s === undefined) _s = initNow ? res.getSeconds() : 0; | |||||
if(_z === undefined) _z = initNow ? res.getMilliseconds() : 0; | |||||
//console.log('2222222222',_y, _m, _d, _h, _i, _s, _z); | |||||
res.setFullYear(_y, _m - 1, _d); | |||||
res.setHours(_h, _i, _s, _z); | |||||
return res; | |||||
} | |||||
/** | |||||
* 转换日期时间格式 | |||||
* @param dateStr 源日期时间字符串 字符串 | |||||
* @param sourceFormat 源格式化字符串 字符串 默认 yyyy-MM-dd HH:mm:ss | |||||
* @param targetFormat 目标格式化字符串 字符串 默认 yyyy-MM-dd HH:mm:ss | |||||
* @param initNow 缺省部分是否使用当前日期时间部分代替 bool 默认不使用当前 | |||||
* @returns {string} 重新格式化的日期时间出字符串 | |||||
*/ | |||||
export function date(dateStr, sourceFormat, targetFormat, initNow) | |||||
{ | |||||
return date_format(strtotime(dateStr, sourceFormat, initNow), targetFormat); | |||||
} |
@@ -0,0 +1,7 @@ | |||||
import store from '../store' | |||||
export const ENV = { | |||||
UserDeptId() { | |||||
return store.state.user.deptId; | |||||
}, | |||||
} |
@@ -6,12 +6,12 @@ | |||||
<el-dropdown trigger="click" placement="bottom-start"> | <el-dropdown trigger="click" placement="bottom-start"> | ||||
<div class="select_address el-dropdown-link"> | <div class="select_address el-dropdown-link"> | ||||
<span class="sanjiao-right"></span> | <span class="sanjiao-right"></span> | ||||
<p>大足区</p> | |||||
<p>{{cityName}}</p> | |||||
</div> | </div> | ||||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | <el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | ||||
<el-dropdown-item v-for="(item,index) in 5"> | |||||
<div class="selected"> | |||||
<p>张家镇</p> | |||||
<el-dropdown-item v-for="(item,index) in deptOptions" :command="item.orgCode"> | |||||
<div class="selected" @click="chooseCity(item.orgCode)"> | |||||
<p>{{item.deptName}}</p> | |||||
</div> | </div> | ||||
</el-dropdown-item> | </el-dropdown-item> | ||||
</el-dropdown-menu> | </el-dropdown-menu> | ||||
@@ -20,12 +20,12 @@ | |||||
<el-dropdown trigger="click" placement="bottom-start"> | <el-dropdown trigger="click" placement="bottom-start"> | ||||
<div class="select_address el-dropdown-link"> | <div class="select_address el-dropdown-link"> | ||||
<span class="sanjiao-right"></span> | <span class="sanjiao-right"></span> | ||||
<p>张家镇</p> | |||||
<p>{{townName}}</p> | |||||
</div> | </div> | ||||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | <el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | ||||
<el-dropdown-item v-for="(item,index) in 5"> | |||||
<div class="selected"> | |||||
<p>张家镇</p> | |||||
<el-dropdown-item v-for="(item,index) in townList" :command="item.orgCode"> | |||||
<div class="selected" @click="chooseTown(item.orgCode)"> | |||||
<p>{{item.deptName}}</p> | |||||
</div> | </div> | ||||
</el-dropdown-item> | </el-dropdown-item> | ||||
</el-dropdown-menu> | </el-dropdown-menu> | ||||
@@ -43,49 +43,61 @@ | |||||
<div class="left_main"> | <div class="left_main"> | ||||
<el-collapse accordion> | <el-collapse accordion> | ||||
<el-collapse-item v-for="(item,index) in 5" :key="index"> | |||||
<el-collapse-item v-for="(item,index) in list" :key="index"> | |||||
<template slot="title"> | <template slot="title"> | ||||
<div class="left_main_tt"> | <div class="left_main_tt"> | ||||
<p>东沙镇</p> | |||||
<p>{{item.townName}}</p> | |||||
<div class="tt_label"> | <div class="tt_label"> | ||||
<p>异常:1</p> | |||||
<p>村庄处理进度:15/20</p> | |||||
<p>村庄审核进度:15/20</p> | |||||
<p>异常:{{item.numExcept}}</p> | |||||
<p>村庄处理进度:{{item.numProcessFinish}}/{{item.num}}</p> | |||||
<p>村庄审核进度:{{item.numApprovalFinish}}/{{item.num}}</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</template> | </template> | ||||
<el-table :data="tableData" style="width: 100%;" :default-sort = "{prop: 'date', order: 'descending'}"> | |||||
<el-table :data="item.villageList" style="width: 100%;" :default-sort = "{prop: 'date', order: 'descending'}"> | |||||
<el-table-column type="expand"> | <el-table-column type="expand"> | ||||
<template slot-scope="props"> | <template slot-scope="props"> | ||||
<div class="openTable"> | <div class="openTable"> | ||||
<el-row v-for="(item,index) in 5" :key="index"> | |||||
<el-col span="9"> | |||||
<el-row v-for="(task,index) in props.row.taskList" :key="index"> | |||||
<el-col :span="9"> | |||||
<div class="tab_main"> | <div class="tab_main"> | ||||
<div v-if="index == 0"><span>未处理</span><span>未审核</span></div> | |||||
<div v-if="index == 1"><span class="tab_green">已处理</span><span class="tab_green">已审核</span></div> | |||||
<div v-if="index == 2"><span class="tab_red">异常:1</span><span>未审核</span></div> | |||||
康师傅合作社 | |||||
<span v-if="task.agentStatus === '1'">未处理</span><span v-if="!task.isAudit">未审核</span> | |||||
<span v-if="task.agentStatus !== '1'" class="tab_green">已处理</span><span class="tab_green" v-if="task.isAudit">已审核</span> | |||||
<span class="tab_red">异常:1</span> | |||||
{{task.bookName}} | |||||
</div> | </div> | ||||
</el-col> | </el-col> | ||||
<el-col span="2">记账:3</el-col> | |||||
<el-col span="2">合同:3</el-col> | |||||
<el-col span="2">其他:3</el-col> | |||||
<el-col span="9" style="text-align: right"><el-button type="primary" size="mini">进入账套</el-button></el-col> | |||||
<el-col :span="2">记账:{{task.voucherCount}}</el-col> | |||||
<el-col :span="2">合同:{{task.contracCount}}</el-col> | |||||
<el-col :span="2">其他:{{task.allCount - task.voucherCount - task.contracCount}}</el-col> | |||||
<el-col :span="9" style="text-align: right"><el-button type="primary" size="mini">进入账套</el-button></el-col> | |||||
</el-row> | </el-row> | ||||
</div> | </div> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column prop="value1" label="村" show-overflow-tooltip /> | |||||
<el-table-column prop="value2" label="合作社" show-overflow-tooltip /> | |||||
<el-table-column prop="value3" label="处理进度" show-overflow-tooltip /> | |||||
<el-table-column prop="value4" label="异常任务" show-overflow-tooltip /> | |||||
<el-table-column prop="value5" label="审核进度" show-overflow-tooltip /> | |||||
<el-table-column prop="value6" label="会计" show-overflow-tooltip /> | |||||
<el-table-column prop="value7" label="下发日期" show-overflow-tooltip /> | |||||
<el-table-column prop="value7" label="截止日期" show-overflow-tooltip /> | |||||
<el-table-column prop="value7" label="记账完成日期" show-overflow-tooltip /> | |||||
<el-table-column prop="orgName" label="村" show-overflow-tooltip /> | |||||
<el-table-column prop="" label="合作社" show-overflow-tooltip /> | |||||
<el-table-column label="处理进度" show-overflow-tooltip > | |||||
<template slot-scope="scope"> | |||||
{{scope.row.numProcessFinish}}/{{scope.row.num}} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="numExcept" label="异常任务" show-overflow-tooltip > | |||||
<template slot-scope="scope"> | |||||
{{scope.row.numExcept || '无'}} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="审核进度" show-overflow-tooltip > | |||||
<template slot-scope="scope"> | |||||
{{scope.row.numApprovalFinish}}/{{scope.row.num}} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="handleNick" label="会计" show-overflow-tooltip /> | |||||
<el-table-column prop="distriDate" label="下发日期" show-overflow-tooltip /> | |||||
<el-table-column prop="endAt" label="截止日期" show-overflow-tooltip /> | |||||
<el-table-column prop="handleDate" label="记账完成日期" show-overflow-tooltip /> | |||||
<el-table-column prop="value8" label="是否审批完成" show-overflow-tooltip > | <el-table-column prop="value8" label="是否审批完成" show-overflow-tooltip > | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<p class="backButton">未完成</p> | <p class="backButton">未完成</p> | ||||
@@ -114,13 +126,15 @@ | |||||
class="pickerTime" | class="pickerTime" | ||||
ref = "datePicker" | ref = "datePicker" | ||||
value-format="yyyy" | value-format="yyyy" | ||||
placeholder="选择年"> | |||||
placeholder="选择年" | |||||
@change="chooseMonth(1)" | |||||
> | |||||
</el-date-picker> | </el-date-picker> | ||||
<span class="sanjiao-bottom" @click="reduceDate"></span> | <span class="sanjiao-bottom" @click="reduceDate"></span> | ||||
</div> | </div> | ||||
<div class="month_main"> | <div class="month_main"> | ||||
<p v-for="(item,index) in 12" :class="{'active':index==3}">{{index+1}}月<i v-if="index==3"></i></p> | |||||
<p v-for="(item,index) in 12" @click="chooseMonth(index + 1)" :class="{'active': isCurrentMonth(index + 1)}">{{index+1}}月<i v-if="isCurrentMonth(index + 1)"></i></p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -132,71 +146,97 @@ | |||||
</template> | </template> | ||||
<script> | <script> | ||||
import {cityTree, deptTree} from "@/api/misc/misc_dept"; | |||||
import {ENV} from "@/utils/env"; | |||||
import {date_format} from "@/utils/date"; | |||||
import {taskList} from "@/api/agentcenter/task"; | |||||
export default { | export default { | ||||
name: "processing", | name: "processing", | ||||
data() { | data() { | ||||
return { | return { | ||||
tableData: [{ | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}], | |||||
year:'2023', | |||||
year: date_format('%Y'), | |||||
cityCode: null, | |||||
townCode: null, | |||||
deptOptions: [], | |||||
month: date_format('%m'), | |||||
list: [], | |||||
total: 0, | |||||
} | } | ||||
}, | }, | ||||
created() { | created() { | ||||
this.getDeptTree(); | |||||
}, | }, | ||||
methods:{ | methods:{ | ||||
addDate(){ | addDate(){ | ||||
this.year = Number(this.year) + 1 ; | this.year = Number(this.year) + 1 ; | ||||
this.chooseMonth(1); | |||||
}, | }, | ||||
reduceDate(){ | reduceDate(){ | ||||
this.year = Number(this.year) - 1 ; | this.year = Number(this.year) - 1 ; | ||||
this.chooseMonth(1); | |||||
}, | }, | ||||
selectionRange(){ | selectionRange(){ | ||||
this.$refs.datePicker.focus(); | this.$refs.datePicker.focus(); | ||||
}, | }, | ||||
getDeptTree() { | |||||
cityTree({rootId: ENV.UserDeptId()}).then((resp) => { | |||||
this.deptOptions = resp.data; | |||||
if(this.deptOptions.length) | |||||
this.cityCode = this.deptOptions[0].orgCode; | |||||
}); | |||||
}, | |||||
getTaskList() { | |||||
if(!this.townCode || !this.year || !this.month) | |||||
return; | |||||
taskList({ | |||||
townCode: this.townCode, | |||||
orderYear: this.year, | |||||
orderMonth: this.month, | |||||
}).then((resp) => { | |||||
this.list = resp.rows; | |||||
this.total = resp.total; | |||||
}) | |||||
}, | |||||
chooseCity(cmd) { | |||||
this.cityCode = cmd; | |||||
this.townCode = null; | |||||
}, | |||||
chooseTown(cmd) { | |||||
this.townCode = cmd; | |||||
this.getTaskList(); | |||||
}, | |||||
isCurrentMonth(m) { | |||||
return parseInt(this.month) === m; | |||||
}, | |||||
chooseMonth(month) { | |||||
this.month = month >= 10 ? '' + month : ('0' + month); | |||||
this.getTaskList(); | |||||
}, | |||||
}, | }, | ||||
mounted(){ | mounted(){ | ||||
} | |||||
}, | |||||
computed: { | |||||
cityName() { | |||||
if(!this.deptOptions.length) | |||||
return ''; | |||||
let dept = this.deptOptions.find((x) => x.orgCode === this.cityCode); | |||||
return dept ? dept.deptName : ''; | |||||
}, | |||||
townList() { | |||||
if(!this.deptOptions.length) | |||||
return []; | |||||
let dept = this.deptOptions.find((x) => x.orgCode === this.cityCode); | |||||
return dept ? dept.children || [] : []; | |||||
}, | |||||
townName() { | |||||
if(!this.townList.length) | |||||
return ''; | |||||
let dept = this.townList.find((x) => x.orgCode === this.townCode); | |||||
return dept ? dept.deptName : ''; | |||||
}, | |||||
}, | |||||
} | } | ||||
</script> | </script> | ||||
@@ -6,12 +6,12 @@ | |||||
<el-dropdown trigger="click" placement="bottom-start"> | <el-dropdown trigger="click" placement="bottom-start"> | ||||
<div class="select_address el-dropdown-link"> | <div class="select_address el-dropdown-link"> | ||||
<span class="sanjiao-right"></span> | <span class="sanjiao-right"></span> | ||||
<p>大足区</p> | |||||
<p>{{cityName}}</p> | |||||
</div> | </div> | ||||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | <el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | ||||
<el-dropdown-item v-for="(item,index) in 5"> | |||||
<div class="selected"> | |||||
<p>张家镇</p> | |||||
<el-dropdown-item v-for="(item,index) in deptOptions"> | |||||
<div class="selected" @click="chooseCity(item.orgCode)"> | |||||
<p>{{item.deptName}}</p> | |||||
</div> | </div> | ||||
</el-dropdown-item> | </el-dropdown-item> | ||||
</el-dropdown-menu> | </el-dropdown-menu> | ||||
@@ -21,43 +21,43 @@ | |||||
<div class="el-dropdown-link select_main"> | <div class="el-dropdown-link select_main"> | ||||
<div class="select_address"> | <div class="select_address"> | ||||
<span class="sanjiao-right"></span> | <span class="sanjiao-right"></span> | ||||
<p>张家镇</p> | |||||
<p>{{townName}}</p> | |||||
</div> | </div> | ||||
<div class="select_address"> | <div class="select_address"> | ||||
<p class="select_time">2023.03.05</p> | <p class="select_time">2023.03.05</p> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<el-dropdown-menu slot="dropdown" style="width: 16vw;text-align: center;"> | <el-dropdown-menu slot="dropdown" style="width: 16vw;text-align: center;"> | ||||
<el-dropdown-item v-for="(item,index) in 5"> | |||||
<div class="selected"> | |||||
<p>张家镇</p> | |||||
<el-dropdown-item v-for="(item,index) in townList"> | |||||
<div class="selected" @click="chooseTown(item.orgCode)"> | |||||
<p>{{item.deptName}}</p> | |||||
<p>2023.03.05</p> | <p>2023.03.05</p> | ||||
</div> | </div> | ||||
</el-dropdown-item> | </el-dropdown-item> | ||||
</el-dropdown-menu> | </el-dropdown-menu> | ||||
</el-dropdown> | </el-dropdown> | ||||
<p class="todo_num">待处理合作社:<span>19</span>个</p> | |||||
<p class="todo_num">待处理合作社:<span>{{total}}</span>个</p> | |||||
</div> | </div> | ||||
<div class="main"> | <div class="main"> | ||||
<div class="left_main"> | <div class="left_main"> | ||||
<el-table :data="tableData" style="width: 100%;" :default-sort = "{prop: 'date', order: 'descending'}"> | |||||
<el-table-column prop="value1" label="村" /> | |||||
<el-table-column prop="value2" label="组织名称" show-overflow-tooltip /> | |||||
<el-table-column prop="value3" label="记账笔数" > | |||||
<el-table :data="list" style="width: 100%;"> | |||||
<el-table-column prop="orgName" label="村" /> | |||||
<el-table-column prop="bookName" label="组织名称" show-overflow-tooltip /> | |||||
<el-table-column prop="voucherCount" label="记账笔数" > | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
5 <span class="num">7</span> | |||||
{{scope.row.voucherCount}} <span class="num">7</span> | |||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column prop="value4" label="合同数量" /> | |||||
<el-table-column prop="value5" label="其他" /> | |||||
<el-table-column prop="value6" label="任务总数" /> | |||||
<el-table-column prop="value7" label="下发日期" /> | |||||
<el-table-column prop="value8" label="截止日期" sortable /> | |||||
<el-table-column prop="value9" label="操作"> | |||||
<el-table-column prop="contracCount" label="合同数量" /> | |||||
<el-table-column prop="otherCount" label="其他" /> | |||||
<el-table-column prop="allCount" label="任务总数" /> | |||||
<el-table-column prop="distriDate" label="下发日期" sortable /> | |||||
<el-table-column prop="endAt" label="截止日期" sortable /> | |||||
<el-table-column label="操作"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button type="primary" size="mini" icon="el-icon-edit"></el-button> | <el-button type="primary" size="mini" icon="el-icon-edit"></el-button> | ||||
</template> | </template> | ||||
@@ -80,13 +80,14 @@ | |||||
class="pickerTime" | class="pickerTime" | ||||
ref = "datePicker" | ref = "datePicker" | ||||
value-format="yyyy" | value-format="yyyy" | ||||
placeholder="选择年"> | |||||
placeholder="选择年" | |||||
@change="chooseMonth(1)"> | |||||
</el-date-picker> | </el-date-picker> | ||||
<span class="sanjiao-bottom" @click="reduceDate"></span> | <span class="sanjiao-bottom" @click="reduceDate"></span> | ||||
</div> | </div> | ||||
<div class="month_main"> | <div class="month_main"> | ||||
<p v-for="(item,index) in 12" :class="{'active':index==3}">{{index+1}}月<i v-if="index==3"></i></p> | |||||
<p v-for="(item,index) in 12" @click="chooseMonth(index + 1)" :class="{'active': isCurrentMonth(index + 1)}">{{index+1}}月<i v-if="isCurrentMonth(index + 1)"></i></p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -98,71 +99,97 @@ | |||||
</template> | </template> | ||||
<script> | <script> | ||||
import {cityTree} from "@/api/misc/misc_dept"; | |||||
import {ENV} from "@/utils/env"; | |||||
import {taskList, todoTaskList} from "@/api/agentcenter/task"; | |||||
import {date_format} from "@/utils/date"; | |||||
export default { | export default { | ||||
name: "todo", | name: "todo", | ||||
data() { | data() { | ||||
return { | return { | ||||
tableData: [{ | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}, { | |||||
value1: '当当村', | |||||
value2: '玩玩玩玩玩玩玩玩合作社', | |||||
value3: '8', | |||||
value4: '5', | |||||
value5: '5', | |||||
value6: '18', | |||||
value7: '2023.03.05', | |||||
value8: '2023.03.06', | |||||
value9: '111' | |||||
}], | |||||
year:'2023', | |||||
deptOptions: [], | |||||
cityCode: null, | |||||
townCode: null, | |||||
list: [], | |||||
total: 0, | |||||
year: date_format('%Y'), | |||||
month: date_format('%m'), | |||||
} | } | ||||
}, | }, | ||||
created() { | created() { | ||||
this.getDeptTree(); | |||||
}, | }, | ||||
methods:{ | methods:{ | ||||
addDate(){ | addDate(){ | ||||
this.year = Number(this.year) + 1 ; | this.year = Number(this.year) + 1 ; | ||||
this.chooseMonth(1); | |||||
}, | }, | ||||
reduceDate(){ | reduceDate(){ | ||||
this.year = Number(this.year) - 1 ; | this.year = Number(this.year) - 1 ; | ||||
this.chooseMonth(1); | |||||
}, | }, | ||||
selectionRange(){ | selectionRange(){ | ||||
this.$refs.datePicker.focus(); | this.$refs.datePicker.focus(); | ||||
}, | }, | ||||
getDeptTree() { | |||||
cityTree({rootId: ENV.UserDeptId()}).then((resp) => { | |||||
this.deptOptions = resp.data; | |||||
if(this.deptOptions.length) | |||||
this.cityCode = this.deptOptions[0].orgCode; | |||||
}); | |||||
}, | |||||
chooseCity(cmd) { | |||||
this.cityCode = cmd; | |||||
this.townCode = null; | |||||
}, | |||||
chooseTown(cmd) { | |||||
this.townCode = cmd; | |||||
this.getTaskList(); | |||||
}, | |||||
getTaskList() { | |||||
if(!this.townCode || !this.year || !this.month) | |||||
return; | |||||
todoTaskList({ | |||||
townCode: this.townCode, | |||||
orderYear: this.year, | |||||
orderMonth: this.month, | |||||
}).then((resp) => { | |||||
this.list = resp.rows; | |||||
this.total = resp.total; | |||||
}) | |||||
}, | |||||
isCurrentMonth(m) { | |||||
return parseInt(this.month) === m; | |||||
}, | |||||
chooseMonth(month) { | |||||
this.month = month >= 10 ? '' + month : ('0' + month); | |||||
this.getTaskList(); | |||||
}, | |||||
}, | }, | ||||
mounted(){ | mounted(){ | ||||
} | |||||
}, | |||||
computed: { | |||||
cityName() { | |||||
if(!this.deptOptions.length) | |||||
return ''; | |||||
let dept = this.deptOptions.find((x) => x.orgCode === this.cityCode); | |||||
return dept ? dept.deptName : ''; | |||||
}, | |||||
townList() { | |||||
if(!this.deptOptions.length) | |||||
return []; | |||||
let dept = this.deptOptions.find((x) => x.orgCode === this.cityCode); | |||||
return dept ? dept.children || [] : []; | |||||
}, | |||||
townName() { | |||||
if(!this.townList.length) | |||||
return ''; | |||||
let dept = this.townList.find((x) => x.orgCode === this.townCode); | |||||
return dept ? dept.deptName : ''; | |||||
}, | |||||
}, | |||||
} | } | ||||
</script> | </script> | ||||
@@ -35,7 +35,7 @@ module.exports = { | |||||
proxy: { | proxy: { | ||||
// detail: https://cli.vuejs.org/config/#devserver-proxy | // detail: https://cli.vuejs.org/config/#devserver-proxy | ||||
[process.env.VUE_APP_BASE_API]: { | [process.env.VUE_APP_BASE_API]: { | ||||
target: `http://localhost:8080`, | |||||
target: process.env.API_HOST || `http://localhost:8080`, | |||||
changeOrigin: true, | changeOrigin: true, | ||||
pathRewrite: { | pathRewrite: { | ||||
['^' + process.env.VUE_APP_BASE_API]: '' | ['^' + process.env.VUE_APP_BASE_API]: '' | ||||