@@ -5,10 +5,13 @@ VUE_APP_TITLE = 农燊高科 | |||
ENV = 'development' | |||
# 农燊高科/开发环境 | |||
VUE_APP_BASE_API = '/dev-api' | |||
VUE_APP_BASE_API = '/api' | |||
# 路由懒加载 | |||
VUE_CLI_BABEL_TRANSPILE_MODULES = true | |||
port = 81 | |||
API_HOST = 'http://localhost:8081' | |||
# 登录账密凭据加密 | |||
VUE_APP_ENABLE_SECRET=true |
@@ -5,4 +5,4 @@ VUE_APP_TITLE = 农燊高科 | |||
ENV = 'production' | |||
# 农燊高科/生产环境 | |||
VUE_APP_BASE_API = '/prod-api' | |||
VUE_APP_BASE_API = '/api' |
@@ -7,4 +7,4 @@ NODE_ENV = production | |||
ENV = 'staging' | |||
# 农燊高科/测试环境 | |||
VUE_APP_BASE_API = '/stage-api' | |||
VUE_APP_BASE_API = '/api' |
@@ -21,3 +21,5 @@ selenium-debug.log | |||
package-lock.json | |||
yarn.lock | |||
dist.* |
@@ -0,0 +1,10 @@ | |||
import request from '@/utils/request' | |||
// 任务 | |||
export function taskList(params) { | |||
return request({ | |||
url: '/agentcenter/task/taskList', | |||
method: 'get', | |||
params: params, | |||
}) | |||
} |
@@ -55,7 +55,7 @@ export function logout() { | |||
// 获取验证码 | |||
export function getCodeImg() { | |||
return request({ | |||
url: '/gkyzm', | |||
url: '/captchaImage', | |||
headers: { | |||
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, | |||
}) | |||
} |
@@ -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"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>大足区</p> | |||
<p>{{cityName}}</p> | |||
</div> | |||
<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> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
@@ -20,12 +20,12 @@ | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>张家镇</p> | |||
<p>{{townName}}</p> | |||
</div> | |||
<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> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
@@ -43,49 +43,61 @@ | |||
<div class="left_main"> | |||
<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"> | |||
<div class="left_main_tt"> | |||
<p>东沙镇</p> | |||
<p>{{item.townName}}</p> | |||
<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> | |||
</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"> | |||
<template slot-scope="props"> | |||
<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 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> | |||
</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> | |||
</div> | |||
</template> | |||
</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 > | |||
<template slot-scope="scope"> | |||
<p class="backButton">未完成</p> | |||
@@ -114,13 +126,15 @@ | |||
class="pickerTime" | |||
ref = "datePicker" | |||
value-format="yyyy" | |||
placeholder="选择年"> | |||
placeholder="选择年" | |||
@change="chooseMonth(1)" | |||
> | |||
</el-date-picker> | |||
<span class="sanjiao-bottom" @click="reduceDate"></span> | |||
</div> | |||
<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> | |||
@@ -132,71 +146,97 @@ | |||
</template> | |||
<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 { | |||
name: "processing", | |||
data() { | |||
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() { | |||
this.getDeptTree(); | |||
}, | |||
methods:{ | |||
addDate(){ | |||
this.year = Number(this.year) + 1 ; | |||
this.chooseMonth(1); | |||
}, | |||
reduceDate(){ | |||
this.year = Number(this.year) - 1 ; | |||
this.chooseMonth(1); | |||
}, | |||
selectionRange(){ | |||
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(){ | |||
} | |||
}, | |||
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> | |||
@@ -35,7 +35,7 @@ module.exports = { | |||
proxy: { | |||
// detail: https://cli.vuejs.org/config/#devserver-proxy | |||
[process.env.VUE_APP_BASE_API]: { | |||
target: `http://localhost:8080`, | |||
target: process.env.API_HOST || `http://localhost:8080`, | |||
changeOrigin: true, | |||
pathRewrite: { | |||
['^' + process.env.VUE_APP_BASE_API]: '' | |||