Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
assets
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄媛媛
assets
Commits
38272837
Commit
38272837
authored
Dec 23, 2019
by
黄媛媛
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
11
parent
ad0e4a65
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
1065 additions
and
66 deletions
+1065
-66
package-lock.json
package-lock.json
+5
-0
package.json
package.json
+1
-0
commonUtils.js
src/assets/utils/commonUtils.js
+432
-0
Archivesmaterials.vue
src/components/Materialman/Archivesmaterials.vue
+5
-6
ConsumRecipients.vue
src/components/Materialman/ConsumRecipients.vue
+0
-2
Materialwarehouse.vue
src/components/Materialman/Materialwarehouse.vue
+0
-1
SpotQuery.vue
src/components/Materialman/SpotQuery.vue
+1
-2
chukudan.vue
src/components/Materialman/chukudan.vue
+4
-3
rukudan.vue
src/components/Materialman/rukudan.vue
+4
-4
AssetsClassification.vue
src/components/Systemman/AssetsClassification.vue
+1
-5
MaterialClassification.vue
src/components/Systemman/MaterialClassification.vue
+1
-6
Supplierman.vue
src/components/Systemman/Supplierman.vue
+0
-1
Sign.vue
src/components/approval/Sign.vue
+220
-0
approvalDetails.vue
src/components/approval/approvalDetails.vue
+322
-6
approvalMan.vue
src/components/approval/approvalMan.vue
+17
-16
PaiTui.vue
src/components/assetsman/PaiTui.vue
+37
-6
assetsList.vue
src/components/assetsman/assetsList.vue
+13
-6
index.vue
src/components/global/index.vue
+2
-2
No files found.
package-lock.json
View file @
38272837
...
...
@@ -14834,6 +14834,11 @@
"resolved"
:
"https://registry.npmjs.org/vue/-/vue-2.6.10.tgz"
,
"integrity"
:
"sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
},
"vue-bus"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/vue-bus/-/vue-bus-1.2.1.tgz"
,
"integrity"
:
"sha512-uCSJEWFWoDZz+GV/Pj/wXAC7WVBLD18V62l+2ezd4UCsZWZB27Hz3K0M9WUcbNum/yKBoN+OkOCIrU6A9xqWhw=="
},
"vue-hot-reload-api"
:
{
"version"
:
"2.3.4"
,
"resolved"
:
"https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz"
,
...
...
package.json
View file @
38272837
...
...
@@ -20,6 +20,7 @@
"
js-md5
"
:
"^0.7.3"
,
"
moment
"
:
"^2.24.0"
,
"
vue
"
:
"^2.5.2"
,
"
vue-bus
"
:
"^1.2.1"
,
"
vue-router
"
:
"^3.0.1"
,
"
vxe-table
"
:
"^2.6.22"
,
"
xe-utils
"
:
"^2.2.15"
...
...
src/assets/utils/commonUtils.js
0 → 100644
View file @
38272837
var
commonUtils
=
{
//json数组求和
CaluJsonArraySum
:
function
(
arr
,
filed
,
num
)
{
var
sum
=
0
;
arr
.
forEach
(
item
=>
{
if
(
item
.
hasOwnProperty
(
filed
))
{
sum
+=
Number
(
item
[
filed
]);
}
});
return
sum
.
toFixed
(
num
);
},
//截取阿里返回文件路径
GetALiFileUrl
:
function
(
str
)
{
var
newStr
=
str
;
if
(
newStr
.
indexOf
(
"?"
)
!=
-
1
)
{
newStr
=
newStr
.
split
(
"?"
)[
0
];
}
return
newStr
;
},
/*正则表达式*/
Regex
:
{
isInteger
:
/
[^\d]
/g
,
//输入验证只能为整
el_isInteger
:
/^
[\d]
+$/
,
//element自带验证为整
el_Isdecimal
:
/^
\d
+
(\.\d{0,2})?
$/
,
//验证只能输入2位小数
el_IsdecimalTrr
:
/^
\d
+
(\.\d{0,8})?
$/
,
//验证只能输入8位小数
el_IsdecimalAll
:
/^
[
0-9
]
+
([
.
]{1}[
0-9
]
+
){0,1}
$/
,
//验证不限小数的
el_ISphone
:
/^
((
0
\d{2,3}
-
\d{7,8})
|
(
1
([
358
][
0-9
]
|4
[
579
]
|66|7
[
0135678
]
|9
[
89
])[
0-9
]{8}))
$/
,
//最新验证输入手机号 包括电话号码
el_IsFax
:
/^
[
+
]{0,1}(\d){1,3}[
]?([
-
]?((\d)
|
[
]){1,12})
+$/
,
//验证传真号
el_IsInventer
:
/^
(\-
|
\+?)\d
+
(\.\d
+
)?
$/
,
//可以输入带正负号整数
el_IsIDnumber
:
/
(
^
\d{15}
$
)
|
(
^
\d{18}
$
)
|
(
^
\d{17}(\d
|X|x
)
$
)
/
,
//验证身份证号
el_IsEnglish
:
/^
[
a-zA-Z
]
/
,
//只能输入英文
el_IsChinese
:
/^
[\u
4E00-
\u
9FA5
]{1,5}
$/
,
//只能输入中文
el_IsNumEn
:
/^
[
a-zA-Z0-9
]
+$/
//输入数字或者字母
},
//文件上传对象
FileObject
:
function
()
{
return
{
Url
:
""
,
Name
:
""
,
}
},
//实现每三位一个逗号分隔并且保留两位小数
addCommas
:
function
(
nStr
)
{
nStr
+=
''
;
let
x
=
nStr
.
split
(
'.'
);
let
x1
=
x
[
0
];
let
x2
=
x
.
length
>
1
?
'.'
+
x
[
1
]
:
''
;
var
rgx
=
/
(\d
+
)(\d{3})
/
;
while
(
rgx
.
test
(
x1
))
{
x1
=
x1
.
replace
(
rgx
,
'$1'
+
','
+
'$2'
);
}
return
x1
+
x2
;
},
formatMsgTime
:
function
(
qdateTime
)
{
var
dateTimeStamp
=
Date
.
parse
(
qdateTime
.
replace
(
/-/gi
,
"/"
));
var
minute
=
1000
*
60
;
var
hour
=
minute
*
60
;
var
day
=
hour
*
24
;
var
month
=
day
*
30
;
var
now
=
new
Date
().
getTime
();
var
diffValue
=
now
-
dateTimeStamp
;
if
(
diffValue
<
0
)
{
return
;
}
var
monthC
=
diffValue
/
month
;
var
weekC
=
diffValue
/
(
7
*
day
);
var
dayC
=
diffValue
/
day
;
var
hourC
=
diffValue
/
hour
;
var
minC
=
diffValue
/
minute
;
var
result
=
""
;
if
(
monthC
>=
1
)
{
result
=
""
+
parseInt
(
monthC
)
+
"月前"
;
}
else
if
(
weekC
>=
1
)
{
result
=
""
+
parseInt
(
weekC
)
+
"周前"
;
}
else
if
(
dayC
>=
1
)
{
result
=
""
+
parseInt
(
dayC
)
+
"天前"
;
}
else
if
(
hourC
>=
1
)
{
result
=
""
+
parseInt
(
hourC
)
+
"小时前"
;
}
else
if
(
minC
>=
1
)
{
result
=
""
+
parseInt
(
minC
)
+
"分钟前"
;
}
else
result
=
"刚刚"
;
return
result
;
},
formatMsgTime2
:
function
(
qdateTime
,
qdateTime2
)
{
var
dateTimeStamp
=
Date
.
parse
(
qdateTime
.
replace
(
/-/gi
,
"/"
));
var
minute
=
1000
*
60
;
var
hour
=
minute
*
60
;
var
day
=
hour
*
24
;
var
month
=
day
*
30
;
var
now
=
new
Date
(
qdateTime2
.
replace
(
/-/gi
,
"/"
)).
getTime
();
var
diffValue
=
now
-
dateTimeStamp
;
if
(
diffValue
<
0
)
{
return
;
}
var
monthC
=
diffValue
/
month
;
var
weekC
=
diffValue
/
(
7
*
day
);
var
dayC
=
diffValue
/
day
;
var
hourC
=
diffValue
/
hour
;
var
minC
=
diffValue
/
minute
;
var
result
=
""
;
if
(
monthC
>=
1
)
{
result
=
""
+
parseInt
(
monthC
)
+
"月前"
;
}
else
if
(
weekC
>=
1
)
{
result
=
""
+
parseInt
(
weekC
)
+
"周前"
;
}
else
if
(
dayC
>=
1
)
{
result
=
""
+
parseInt
(
dayC
)
+
"天前"
;
}
else
if
(
hourC
>=
1
)
{
result
=
""
+
parseInt
(
hourC
)
+
"小时前"
;
}
else
if
(
minC
>=
1
)
{
result
=
""
+
parseInt
(
minC
)
+
"分钟前"
;
}
else
result
=
"刚刚"
;
return
result
;
},
changeMoneyToChinese
(
Num
)
{
// 数字转中文大写
if
(
!
Num
)
{
return
'零'
}
var
isNegative
=
false
;
// 是否负数
if
(
Num
<
0
)
{
Num
=
-
Num
;
isNegative
=
true
;
}
if
(
typeof
Num
==
'number'
)
{
Num
=
Num
.
toString
();
}
for
(
var
i
=
Num
.
length
-
1
;
i
>=
0
;
i
--
)
{
Num
=
Num
.
replace
(
","
,
""
);
// 替换money中的“,”
Num
=
Num
.
replace
(
" "
,
""
);
// 替换money中的空格
}
Num
=
Num
.
replace
(
"¥"
,
""
);
// 替换掉可能出现的¥字符
if
(
isNaN
(
Num
))
{
// 验证输入的字符是否为数字
return
;
}
// ---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
let
part
=
String
(
Num
).
split
(
"."
);
let
newchar
=
""
;
// 小数点前进行转化
for
(
var
i
=
part
[
0
].
length
-
1
;
i
>=
0
;
i
--
)
{
if
(
part
[
0
].
length
>
10
)
{
// alertWarning("位数过大,无法计算");
return
""
;
}
// 若数量超过拾亿单位,提示
let
tmpnewchar
=
""
;
let
perchar
=
part
[
0
].
charAt
(
i
);
switch
(
perchar
)
{
case
"0"
:
tmpnewchar
=
"零"
+
tmpnewchar
;
break
;
case
"1"
:
tmpnewchar
=
"壹"
+
tmpnewchar
;
break
;
case
"2"
:
tmpnewchar
=
"贰"
+
tmpnewchar
;
break
;
case
"3"
:
tmpnewchar
=
"叁"
+
tmpnewchar
;
break
;
case
"4"
:
tmpnewchar
=
"肆"
+
tmpnewchar
;
break
;
case
"5"
:
tmpnewchar
=
"伍"
+
tmpnewchar
;
break
;
case
"6"
:
tmpnewchar
=
"陆"
+
tmpnewchar
;
break
;
case
"7"
:
tmpnewchar
=
"柒"
+
tmpnewchar
;
break
;
case
"8"
:
tmpnewchar
=
"捌"
+
tmpnewchar
;
break
;
case
"9"
:
tmpnewchar
=
"玖"
+
tmpnewchar
;
break
;
}
switch
(
part
[
0
].
length
-
i
-
1
)
{
case
0
:
tmpnewchar
=
tmpnewchar
+
"元"
;
break
;
case
1
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"拾"
;
break
;
case
2
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"佰"
;
break
;
case
3
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"仟"
;
break
;
case
4
:
tmpnewchar
=
tmpnewchar
+
"万"
;
break
;
case
5
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"拾"
;
break
;
case
6
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"佰"
;
break
;
case
7
:
if
(
perchar
!=
0
)
tmpnewchar
=
tmpnewchar
+
"仟"
;
break
;
case
8
:
tmpnewchar
=
tmpnewchar
+
"亿"
;
break
;
case
9
:
tmpnewchar
=
tmpnewchar
+
"拾"
;
break
;
}
newchar
=
tmpnewchar
+
newchar
;
}
// 小数点之后进行转化
if
(
Num
.
indexOf
(
"."
)
!=
-
1
)
{
if
(
part
[
1
].
length
>
2
)
{
// alertWarning("小数点之后只能保留两位,系统将自动截段");
part
[
1
]
=
part
[
1
].
substr
(
0
,
2
);
}
for
(
var
i
=
0
;
i
<
part
[
1
].
length
;
i
++
)
{
let
tmpnewchar
=
""
;
let
perchar
=
part
[
1
].
charAt
(
i
);
switch
(
perchar
)
{
case
"0"
:
tmpnewchar
=
"零"
+
tmpnewchar
;
break
;
case
"1"
:
tmpnewchar
=
"壹"
+
tmpnewchar
;
break
;
case
"2"
:
tmpnewchar
=
"贰"
+
tmpnewchar
;
break
;
case
"3"
:
tmpnewchar
=
"叁"
+
tmpnewchar
;
break
;
case
"4"
:
tmpnewchar
=
"肆"
+
tmpnewchar
;
break
;
case
"5"
:
tmpnewchar
=
"伍"
+
tmpnewchar
;
break
;
case
"6"
:
tmpnewchar
=
"陆"
+
tmpnewchar
;
break
;
case
"7"
:
tmpnewchar
=
"柒"
+
tmpnewchar
;
break
;
case
"8"
:
tmpnewchar
=
"捌"
+
tmpnewchar
;
break
;
case
"9"
:
tmpnewchar
=
"玖"
+
tmpnewchar
;
break
;
}
if
(
i
==
0
)
tmpnewchar
=
tmpnewchar
+
"角"
;
if
(
i
==
1
)
tmpnewchar
=
tmpnewchar
+
"分"
;
newchar
=
newchar
+
tmpnewchar
;
}
}
// 替换所有无用汉字
while
(
newchar
.
search
(
"零零"
)
!=
-
1
)
newchar
=
newchar
.
replace
(
"零零"
,
"零"
);
newchar
=
newchar
.
replace
(
"零亿"
,
"亿"
);
newchar
=
newchar
.
replace
(
"亿万"
,
"亿"
);
newchar
=
newchar
.
replace
(
"零万"
,
"万"
);
newchar
=
newchar
.
replace
(
"零元"
,
"元"
);
newchar
=
newchar
.
replace
(
"零角"
,
""
);
newchar
=
newchar
.
replace
(
"零分"
,
""
);
if
(
newchar
.
charAt
(
newchar
.
length
-
1
)
==
"元"
||
newchar
.
charAt
(
newchar
.
length
-
1
)
==
"角"
)
{
newchar
=
newchar
+
"整"
;
}
if
(
isNegative
)
{
newchar
=
'负'
+
newchar
;
}
return
newchar
;
},
createComprisonFunction
(
propertyName
)
{
return
function
(
object1
,
object2
)
{
var
value1
=
object1
[
propertyName
];
var
value2
=
object2
[
propertyName
];
if
(
value1
<
value2
)
{
return
-
1
;
}
else
if
(
value1
>
value2
)
{
return
1
;
}
else
{
return
0
;
}
};
},
//价格转换器
getConvertMoney
(
value
)
{
if
(
value
===
""
||
value
===
undefined
||
value
===
null
)
{
value
=
0.0
}
return
parseFloat
(
value
)
},
//两个日期比较大小 返回值大于0:date1>date2,返回值等于0:date1=date2,返回值小于0:date1<date2
CompareDate
(
date1
,
date2
)
{
var
oDate1
=
new
Date
(
date1
);
var
oDate2
=
new
Date
(
date2
);
if
(
oDate1
.
getTime
()
>
oDate2
.
getTime
())
{
return
1
}
else
if
(
oDate1
.
getTime
()
==
oDate2
.
getTime
())
{
return
0
;
}
else
{
return
-
1
;
}
},
//判断值是否为空
isNullOrEmpty
:
function
(
value
)
{
if
(
value
===
null
||
value
===
""
||
value
===
undefined
)
{
return
true
;
}
else
{
return
false
;
}
},
//NULL转字符串
getStrValue
:
function
(
value
)
{
if
(
value
==
null
)
{
value
=
""
;
}
return
value
;
},
//获取后面的字符串
getCaption
:
function
(
obj
,
splitStr
)
{
var
index
=
obj
.
lastIndexOf
(
splitStr
);
obj
=
obj
.
substring
(
index
+
1
,
obj
.
length
);
return
obj
;
},
//公用去掉域名
removeDomain
:
function
(
val
)
{
var
reg
=
/^http
(
s
)?
:
\/\/(
.*
?)\/
/
;
return
val
.
replace
(
reg
,
''
);
},
//获取当前日期
getCurrentDate
()
{
var
myDate
=
new
Date
();
//返回年月日
return
myDate
.
getFullYear
()
+
'-'
+
parseInt
(
myDate
.
getMonth
()
+
1
)
+
"-"
+
myDate
.
getDate
()
},
//判断字符串是否为数字
isNumber
:
function
(
val
)
{
var
regPos
=
/^
\d
+
(\.\d
+
)?
$/
;
//非负浮点数
var
regNeg
=
/^
(
-
(([
0-9
]
+
\.[
0-9
]
*
[
1-9
][
0-9
]
*
)
|
([
0-9
]
*
[
1-9
][
0-9
]
*
\.[
0-9
]
+
)
|
([
0-9
]
*
[
1-9
][
0-9
]
*
)))
$/
;
//负浮点数
if
(
regPos
.
test
(
val
)
||
regNeg
.
test
(
val
))
{
return
true
;
}
else
{
return
false
;
}
},
//去掉图片的https
replaceHttps
:
function
(
val
)
{
return
val
.
replace
(
"https"
,
"http"
);
},
//计算两日期时间间隔
getDateTimeInterval
:
function
(
startDate
,
endDate
)
{
var
diff
=
endDate
.
getTime
()
-
startDate
.
getTime
();
//时间差的毫秒数
//计算出相差天数
var
days
=
Math
.
floor
(
diff
/
(
24
*
3600
*
1000
));
//计算出小时数
var
leave1
=
diff
%
(
24
*
3600
*
1000
);
//计算天数后剩余的毫秒数
var
hours
=
Math
.
floor
(
leave1
/
(
3600
*
1000
));
//计算相差分钟数
var
leave2
=
leave1
%
(
3600
*
1000
);
//计算小时数后剩余的毫秒数
var
minutes
=
Math
.
floor
(
leave2
/
(
60
*
1000
));
//计算相差秒数
var
leave3
=
leave2
%
(
60
*
1000
);
//计算分钟数后剩余的毫秒数
var
seconds
=
Math
.
round
(
leave3
/
1000
);
var
returnStr
=
seconds
+
"秒"
;
if
(
minutes
>
0
)
{
returnStr
=
minutes
+
"分"
+
returnStr
;
}
if
(
hours
>
0
)
{
returnStr
=
hours
+
"小时"
+
returnStr
;
}
if
(
days
>
0
)
{
returnStr
=
days
+
"天"
+
returnStr
;
}
return
returnStr
;
},
//将yyyy年mm月dd日 hh:mm:ss 转换为 yyyy-mm-dd hh:mm:ss
getDateStr
(
date
)
{
let
dateStr
=
""
;
if
(
date
!=
""
)
{
let
dateArr
=
date
.
split
(
' '
);
let
str
=
dateArr
[
0
].
replace
(
/
[^\d]
/g
,
'-'
);
dateStr
=
str
.
substr
(
0
,
str
.
length
-
1
)
+
' '
+
dateArr
[
1
];
}
return
dateStr
;
},
/**
* 增加减少天数
* date:可以不传
* day:正数
*/
AddDay
(
date
,
day
)
{
var
myDate
=
""
;
if
(
date
)
{
myDate
=
new
Date
(
date
);
}
else
{
myDate
=
new
Date
();
}
myDate
=
myDate
.
setDate
(
myDate
.
getDate
()
+
day
);
myDate
=
new
Date
(
myDate
);
var
seperator1
=
"-"
;
var
year
=
myDate
.
getFullYear
();
var
month
=
myDate
.
getMonth
()
+
1
;
var
strDate
=
myDate
.
getDate
();
if
(
month
>=
1
&&
month
<=
9
)
{
month
=
"0"
+
month
;
}
if
(
strDate
>=
0
&&
strDate
<=
9
)
{
strDate
=
"0"
+
strDate
;
}
var
currentdate
=
year
+
seperator1
+
month
+
seperator1
+
strDate
;
return
currentdate
;
}
}
export
default
commonUtils
src/components/Materialman/Archivesmaterials.vue
View file @
38272837
...
...
@@ -23,6 +23,7 @@
</ul>
<table
style=
"margin-top:10px"
class=
"myTable"
v-loading=
"loading"
border=
"0"
cellspacing=
"0"
cellpadding=
"0"
>
<thead>
<th>
档案编码
</th>
<th>
物料档案名称
</th>
<th>
分类名称
</th>
<th>
品牌名
</th>
...
...
@@ -31,7 +32,6 @@
<th>
条形码号
</th>
<th>
库存
</th>
<th>
型号
</th>
<th>
档案编码
</th>
<th>
操作人
</th>
<th>
操作时间
</th>
<th>
备注
</th>
...
...
@@ -41,8 +41,9 @@
<tr
v-for=
"(item,index) in tableData"
:key=
"index"
>
<td>
<span
class=
"commonStyle hoverSpan1"
></span>
{{
item
.
Name
}}
{{
item
.
SuppliesNum
}}
</td>
<td>
{{
item
.
Name
}}
</td>
<td>
{{
item
.
CategoryName
}}
</td>
<td>
{{
item
.
BrandName
}}
</td>
<td>
{{
item
.
Money
}}
</td>
...
...
@@ -53,7 +54,7 @@
<div>
安全库存:
{{
item
.
SafetyStock
}}
</div>
</td>
<td>
{{
item
.
SuppliesModel
}}
</td>
<td>
{{
item
.
SuppliesNum
}}
</td>
<!--
<td>
<img
v-for=
"(subItem,index) in item.ImageList"
:key=
"index"
:src=
"subItem"
alt=
""
>
</td>
-->
...
...
@@ -369,7 +370,6 @@ export default {
this
.
dialogtitle
=
"编辑物料档案"
;
this
.
dialogState
=
true
;
this
.
addMsg
=
Object
.
assign
({},
item
)
console
.
log
(
item
,
'itemmm'
);
if
(
!
this
.
addMsg
.
ImageList
){
this
.
addMsg
.
ImageList
=
[];
}
...
...
@@ -402,7 +402,6 @@ export default {
});
},
treeClick
(
data
){
console
.
log
(
"data"
,
data
)
},
getNode
(){
this
.
apiJavaPost
(
"/api/property/CateporyGetTreeList"
,
this
.
nodemsg
,
...
...
src/components/Materialman/ConsumRecipients.vue
View file @
38272837
...
...
@@ -194,7 +194,6 @@ export default {
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
departmentata
=
res
.
data
.
data
;
console
.
log
(
"this.departmentata"
,
this
.
departmentata
)
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
...
...
@@ -257,7 +256,6 @@ export default {
res
=>
{
this
.
loading
=
false
;
if
(
res
.
data
.
resultCode
===
1
)
{
console
.
log
(
"res"
,
res
);
let
data
=
res
.
data
.
data
;
this
.
tableData
=
data
.
pagelist
.
pageData
;
this
.
total
=
data
.
pagelist
.
count
;
...
...
src/components/Materialman/Materialwarehouse.vue
View file @
38272837
...
...
@@ -146,7 +146,6 @@ export default {
res
=>
{
this
.
loading
=
false
;
if
(
res
.
data
.
resultCode
===
1
)
{
console
.
log
(
"res"
,
res
);
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
}
else
{
...
...
src/components/Materialman/SpotQuery.vue
View file @
38272837
...
...
@@ -39,10 +39,10 @@
<vxe-table
style=
"margin-top:15px"
:loading=
"loading"
:data=
"tableData"
>
<vxe-table-column
field=
"SuppliesNum"
title=
"耗材编码"
></vxe-table-column>
<vxe-table-column
field=
"WareHouseName"
title=
"仓库名称"
></vxe-table-column>
<vxe-table-column
field=
"SuppliesName"
title=
"耗材名称"
></vxe-table-column>
<vxe-table-column
field=
"CategoryName"
title=
"分类名称"
></vxe-table-column>
<vxe-table-column
field=
"SuppliesModel"
title=
"耗材型号"
></vxe-table-column>
<vxe-table-column
field=
"WareHouseName"
title=
"仓库名称"
></vxe-table-column>
<vxe-table-column
field=
"BrandName"
title=
"品牌"
></vxe-table-column>
<vxe-table-column
field=
"Units"
title=
"单位"
></vxe-table-column>
<vxe-table-column
field=
"SafetyStock"
title=
"安全库存"
></vxe-table-column>
...
...
@@ -153,7 +153,6 @@ export default {
res
=>
{
this
.
loading
=
false
;
if
(
res
.
data
.
resultCode
===
1
)
{
console
.
log
(
"res"
,
res
);
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
}
else
{
...
...
src/components/Materialman/chukudan.vue
View file @
38272837
...
...
@@ -66,12 +66,12 @@
<th>
出库单编码
</th>
<th>
仓库名称
</th>
<!--
<th>
供应商名称
</th>
-->
<th>
出库时间
</th>
<th>
分类名称
</th>
<th>
耗材名称
</th>
<th>
品牌名称
</th>
<th>
库存
</th>
<th>
数量
</th>
<th>
出库时间
</th>
<th
width=
"150px"
>
操作
</th>
</thead>
<tbody>
...
...
@@ -86,12 +86,13 @@
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockOutNum
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
WareHouseName
}}
</td>
<!--
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
SupplierName
}}
</td>
-->
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockOutDate
}}
</td>
<td>
{{
delist
.
CategoryName
}}
</td>
<td>
{{
delist
.
SuppliesName
}}
</td>
<td>
{{
delist
.
BrandName
}}
</td>
<td>
{{
delist
.
InventoryNum
}}
</td>
<td>
{{
delist
.
Number
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockOutDate
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<!--
<el-tooltip
class=
"item"
effect=
"dark"
content=
"编辑"
placement=
"top"
>
...
...
src/components/Materialman/rukudan.vue
View file @
38272837
...
...
@@ -55,13 +55,13 @@
<th>
入库单编码
</th>
<th>
仓库名称
</th>
<th>
供应商名称
</th>
<th>
入库时间
</th>
<th>
分类名称
</th>
<th>
耗材名称
</th>
<th>
品牌名称
</th>
<th>
单价
</th>
<th>
金额
</th>
<th>
数量
</th>
<th>
入库时间
</th>
<th
width=
"150px"
>
操作
</th>
</thead>
<tbody>
...
...
@@ -76,13 +76,13 @@
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockInNum
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
WareHouseName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
SupplierName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockInDate
}}
</td>
<td>
{{
delist
.
CategoryName
}}
</td>
<td>
{{
delist
.
SuppliesName
}}
</td>
<td>
{{
delist
.
BrandName
}}
</td>
<td>
{{
delist
.
UnitPrice
}}
</td>
<td>
{{
delist
.
Money
}}
</td>
<td>
{{
delist
.
Number
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
StockInDate
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"编辑"
placement=
"top"
>
...
...
src/components/Systemman/AssetsClassification.vue
View file @
38272837
...
...
@@ -344,11 +344,7 @@ export default {
);
},
Nodeclick
(
obj
,
node
){
// console.log("obj",obj)
// this.msg.Name=obj.Name;
// this.msg.Tier=obj.Tier;
// this.msg.ParentId=obj.ParentId;
// this.getList();
},
handleCurrentChange
(
val
)
{
...
...
src/components/Systemman/MaterialClassification.vue
View file @
38272837
...
...
@@ -224,7 +224,6 @@ export default {
this
.
addMsg
.
Tier
=
data
.
Tier
;
this
.
addMsg
.
Sort
=
data
.
Sort
;
this
.
getflList
(
data
.
Tier
)
console
.
log
(
"this.addMsg"
,
this
.
addMsg
)
},
DeleteNode
(
node
,
data
){
this
.
Delete
(
node
);
...
...
@@ -347,11 +346,7 @@ export default {
);
},
Nodeclick
(
obj
,
node
){
// console.log("obj",obj)
// this.msg.Name=obj.Name;
// this.msg.Tier=obj.Tier;
// this.msg.ParentId=obj.ParentId;
// this.getList();
},
handleCurrentChange
(
val
)
{
...
...
src/components/Systemman/Supplierman.vue
View file @
38272837
...
...
@@ -201,7 +201,6 @@ export default {
res
=>
{
this
.
loading
=
false
;
if
(
res
.
data
.
resultCode
===
1
)
{
console
.
log
(
"res"
,
res
);
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
}
else
{
...
...
src/components/approval/Sign.vue
0 → 100644
View file @
38272837
<
template
>
<div
class=
"Sign"
>
<section
class=
"signature"
>
<div
class=
"signatureBox"
>
<div
class=
"canvasBox"
ref=
"canvasHW"
>
<canvas
ref=
"canvasF"
@
touchstart=
'touchStart'
@
touchmove=
'touchMove'
@
touchend=
'touchEnd'
@
mousedown=
"mouseDown"
@
mousemove=
"mouseMove"
@
mouseup=
"mouseUp"
></canvas>
<div
class=
"btnBox"
>
<div
@
click=
"overwrite"
>
重写
</div>
<div
@
click=
"commit"
>
提交签名
</div>
</div>
</div>
</div>
<img
class=
"imgCanvas"
:src=
"imgUrl"
>
</section>
</div>
</
template
>
<
script
>
export
default
{
name
:
'Sign'
,
data
(){
return
{
dialogVisible
:
true
,
imgSrc
:
''
,
stageInfo
:
''
,
imgUrl
:
''
,
client
:
{},
points
:
[],
canvasTxt
:
null
,
startX
:
0
,
startY
:
0
,
moveY
:
0
,
moveX
:
0
,
endY
:
0
,
endX
:
0
,
w
:
null
,
h
:
null
,
isDown
:
false
,
isViewAutograph
:
this
.
$route
.
query
.
isViews
>
0
,
contractSuccess
:
this
.
$route
.
query
.
contractSuccess
}
},
mounted
(){
let
canvas
=
this
.
$refs
.
canvasF
canvas
.
height
=
this
.
$refs
.
canvasHW
.
offsetHeight
-
500
canvas
.
width
=
this
.
$refs
.
canvasHW
.
offsetWidth
-
50
this
.
canvasTxt
=
canvas
.
getContext
(
'2d'
)
this
.
stageInfo
=
canvas
.
getBoundingClientRect
()
},
methods
:{
mouseDown
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
1
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
startX
=
obj
.
x
this
.
startY
=
obj
.
y
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
this
.
isDown
=
true
}
},
mouseMove
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
this
.
isDown
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
moveY
=
obj
.
y
this
.
moveX
=
obj
.
x
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
startY
=
obj
.
y
this
.
startX
=
obj
.
x
this
.
points
.
push
(
obj
)
}
},
mouseUp
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
1
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
this
.
points
.
push
({
x
:
-
1
,
y
:
-
1
})
this
.
isDown
=
false
}
},
//重写
overwrite
()
{
this
.
canvasTxt
.
clearRect
(
0
,
0
,
this
.
$refs
.
canvasF
.
width
,
this
.
$refs
.
canvasF
.
height
)
this
.
points
=
[]
},
//提交签名
commit
()
{
this
.
imgUrl
=
this
.
$refs
.
canvasF
.
toDataURL
();
console
.
log
(
this
.
$refs
.
canvasF
.
toDataURL
())
//签名img回传后台
},
//mobile
touchStart
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clienX
,
y
:
ev
.
targetTouches
[
0
].
clientY
,
}
this
.
startX
=
obj
.
x
this
.
startY
=
obj
.
y
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
}
},
touchMove
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clientX
-
this
.
stageInfo
.
left
,
y
:
ev
.
targetTouches
[
0
].
clientY
-
this
.
stageInfo
.
top
}
this
.
moveY
=
obj
.
y
this
.
moveX
=
obj
.
x
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
startY
=
obj
.
y
this
.
startX
=
obj
.
x
this
.
points
.
push
(
obj
)
}
},
touchEnd
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clientX
-
this
.
stageInfo
.
left
,
y
:
ev
.
targetTouches
[
0
].
clientY
-
this
.
stageInfo
.
top
}
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
}
},
},
}
</
script
>
<
style
>
.Sign
.signatureBox
{
width
:
100%
;
height
:
calc
(
100%
-
50px
);
box-sizing
:
border-box
;
overflow
:
hidden
;
background
:
#fff
;
z-index
:
100
;
display
:
flex
;
flex-direction
:
column
;
}
.Sign
.canvasBox
{
box-sizing
:
border-box
;
flex
:
1
;
}
.Sign
canvas
{
border
:
1px
solid
#7d7d7d
;
}
.Sign
.btnBox
{
padding
:
10px
;
text-align
:
center
;
}
.Sign
.btnBox
button
:first-of-type
{
background
:
transparent
;
border-radius
:
4px
;
height
:
40px
;
width
:
80px
;
font-size
:
14px
;
}
.Sign
.btnBox
button
:last-of-type
{
background
:
#71b900
;
color
:
#fff
;
border-radius
:
4px
;
height
:
40px
;
width
:
80px
;
font-size
:
14px
;
}
</
style
>
src/components/approval/approvalDetails.vue
View file @
38272837
...
...
@@ -2,6 +2,7 @@
<div
class=
"approvalDetails"
>
<div
style=
"border-bottom:1px solid #E2E4EB;padding-bottom:10px"
>
<span
class=
"pageTitle"
style=
"float:inherit"
>
详情
</span>
<span
@
click=
"backTo"
class=
"backTo"
style=
""
>
返回
</span>
</div>
<div
style=
"margin-top:30px;background:rgba(255,255,255,1);border-radius:10px;padding:20px;position:relative;"
>
<el-row
style=
"border-bottom:1px solid #E2E4EB;padding-bottom:20px"
>
...
...
@@ -151,6 +152,9 @@
</ul>
</div>
</div>
<div
v-if=
"son.SignImage!=''"
>
<img
style=
"height: 82px;width: 143px;margin-top:10px;border: 1px solid #eee"
:src=
"son.SignImage"
>
</div>
</div>
</div>
<div
class=
"_more _mgt_15"
v-for=
"(son,sindex) in item.AuditRecordList"
v-if=
"son.AuditStatus!=2"
>
...
...
@@ -182,6 +186,9 @@
</ul>
</div>
</div>
<div
v-if=
"son.SignImage!=''"
>
<img
style=
"height: 82px;width: 143px;margin-top:10px;border: 1px solid #eee"
:src=
"son.SignImage"
>
</div>
</div>
<div
class=
"_right_content"
v-else-if=
"item.AuditWay==3 && son.AuditStatus==1"
>
<p
class=
"_name"
>
...
...
@@ -240,6 +247,9 @@
</ul>
</div>
</div>
<div
v-if=
"son.SignImage!=''"
>
<img
style=
"height: 82px;width: 143px;margin-top:10px;border: 1px solid #eee"
:src=
"son.SignImage"
>
</div>
</div>
</div>
</div>
...
...
@@ -267,11 +277,20 @@
</div>
</div>
</div>
<textarea
v-if=
"item.NextStep==1 && compType=='shenpi'"
class=
"_textareaNew"
v-model=
"addMsg.AuditDescription"
placeholder=
"请输入..."
></textarea>
<textarea
v-if=
"item.NextStep==1 && compType=='shenpi' &&item.SpecialNode==1"
class=
"_textareaNew"
v-model=
"addMsg.AuditDescription"
placeholder=
"请输入..."
></textarea>
<!-- 签名(当前审核人是否需要签名) -->
<div
v-if=
"item.NextStep==1 &&item.SpecialNode==1 && compType=='shenpi'"
style=
"margin-bottom:10px;padding:10px 0 0 0"
>
<p>
<span
@
click=
"signState=true"
class=
"signSpan f12"
>
签名
</span>
</p>
<div
v-show=
"addMsg.SignImage!=''"
>
<img
style=
"height: 82px;width: 143px;margin-top:10px"
:src=
"addMsg.SignImage"
>
</div>
</div>
</div>
</template>
<div
v-if=
"GetDetail.Is_CanAudit==1 && compType=='shenpi'"
class=
"_upload_box"
style=
"margin-bottom:20px;padding-left:70px"
>
<div
v-if=
"GetDetail.Is_CanAudit==1 && compType=='shenpi'
&& !needSign
"
class=
"_upload_box"
style=
"margin-bottom:20px;padding-left:70px"
>
<ul
class=
"clearfix"
>
<li
v-for=
"(img,imgIndex) in uploadImgList"
:key=
"imgIndex"
>
<img
:src=
"img.src"
alt=
""
>
...
...
@@ -297,11 +316,31 @@
<span
@
click=
"approvalOrder(1)"
class=
"tongguo"
>
通过
</span>
<span
@
click=
"approvalOrder(2)"
class=
"bohui"
>
驳回
</span>
</div>
<!-- 申请人审批 -->
</div>
</div>
</div>
<!-- 签名 -->
<div
class=
"Sign"
:class=
"signState?'zindex':''"
>
<div
class=
"signature"
>
<p
class=
"f14"
style=
"padding:10px 10px 10px 0"
>
签名
<span
@
click=
"CloseSign"
style=
"float:right"
class=
"el-icon-close"
></span>
</p>
<div
class=
"signatureBox"
>
<div
class=
"canvasBox"
ref=
"canvasHW"
>
<canvas
ref=
"canvasF"
@
touchstart=
'touchStart'
@
touchmove=
'touchMove'
@
touchend=
'touchEnd'
@
mousedown=
"mouseDown"
@
mousemove=
"mouseMove"
@
mouseup=
"mouseUp"
></canvas>
<div
class=
"button"
style=
"text-align:center;margin-top:20px"
>
<span
@
click=
"overwrite"
class=
"tongguo"
>
重写
</span>
<span
@
click=
"commit"
class=
"bohui"
>
提交
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
>
...
...
@@ -322,20 +361,46 @@ export default {
ImageList
:[],
UseReceiveId
:
''
,
AuditType
:
''
,
SignImage
:
''
,
},
compType
:
''
,
backto
:
''
,
showTable
:
''
,
danjuMsg
:{
pageIndex
:
1
,
pageSize
:
20
,
ResourceId
:
''
,
Type
:
1
,
},
imgSrc
:
''
,
stageInfo
:
''
,
imgUrl
:
''
,
client
:
{},
points
:
[],
canvasTxt
:
null
,
startX
:
0
,
startY
:
0
,
moveY
:
0
,
moveX
:
0
,
endY
:
0
,
endX
:
0
,
w
:
null
,
h
:
null
,
isDown
:
false
,
isViewAutograph
:
this
.
$route
.
query
.
isViews
>
0
,
contractSuccess
:
this
.
$route
.
query
.
contractSuccess
,
signState
:
false
,
needSign
:
false
,
}
},
created
(){
if
(
this
.
$route
.
query
.
compType
){
this
.
compType
=
this
.
$route
.
query
.
compType
;
}
this
.
backto
=
this
.
$route
.
query
.
backto
?
this
.
$route
.
query
.
backto
:
''
;
this
.
showTable
=
this
.
$route
.
query
.
showTable
?
this
.
$route
.
query
.
showTable
:
''
;
if
(
this
.
$route
.
query
.
Id
){
this
.
addMsg
.
UseReceiveId
=
this
.
$route
.
query
.
Id
;
this
.
danjuMsg
.
ResourceId
=
this
.
$route
.
query
.
Id
;
...
...
@@ -346,10 +411,156 @@ export default {
},
mounted
(){
let
canvas
=
this
.
$refs
.
canvasF
canvas
.
height
=
this
.
$refs
.
canvasHW
.
offsetHeight
-
100
canvas
.
width
=
this
.
$refs
.
canvasHW
.
offsetWidth
-
10
this
.
canvasTxt
=
canvas
.
getContext
(
'2d'
)
this
.
stageInfo
=
canvas
.
getBoundingClientRect
()
},
methods
:{
CloseSign
(){
this
.
signState
=
false
;
},
// 签名
//重写
overwrite
()
{
this
.
canvasTxt
.
clearRect
(
0
,
0
,
this
.
$refs
.
canvasF
.
width
,
this
.
$refs
.
canvasF
.
height
)
this
.
points
=
[]
},
//提交签名
commit
()
{
this
.
addMsg
.
SignImage
=
this
.
$refs
.
canvasF
.
toDataURL
();
this
.
signState
=
false
;
},
mouseDown
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
1
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
startX
=
obj
.
x
this
.
startY
=
obj
.
y
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
this
.
isDown
=
true
}
},
mouseMove
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
this
.
isDown
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
moveY
=
obj
.
y
this
.
moveX
=
obj
.
x
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
startY
=
obj
.
y
this
.
startX
=
obj
.
x
this
.
points
.
push
(
obj
)
}
},
mouseUp
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
1
)
{
let
obj
=
{
x
:
ev
.
offsetX
,
y
:
ev
.
offsetY
}
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
this
.
points
.
push
({
x
:
-
1
,
y
:
-
1
})
this
.
isDown
=
false
}
},
//mobile
touchStart
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clienX
,
y
:
ev
.
targetTouches
[
0
].
clientY
,
}
this
.
startX
=
obj
.
x
this
.
startY
=
obj
.
y
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
}
},
touchMove
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clientX
-
this
.
stageInfo
.
left
,
y
:
ev
.
targetTouches
[
0
].
clientY
-
this
.
stageInfo
.
top
}
this
.
moveY
=
obj
.
y
this
.
moveX
=
obj
.
x
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
startY
=
obj
.
y
this
.
startX
=
obj
.
x
this
.
points
.
push
(
obj
)
}
},
touchEnd
(
ev
)
{
ev
=
ev
||
event
ev
.
preventDefault
()
if
(
ev
.
touches
.
length
==
1
)
{
let
obj
=
{
x
:
ev
.
targetTouches
[
0
].
clientX
-
this
.
stageInfo
.
left
,
y
:
ev
.
targetTouches
[
0
].
clientY
-
this
.
stageInfo
.
top
}
this
.
canvasTxt
.
beginPath
()
this
.
canvasTxt
.
moveTo
(
this
.
startX
,
this
.
startY
)
this
.
canvasTxt
.
lineTo
(
obj
.
x
,
obj
.
y
)
this
.
canvasTxt
.
stroke
()
this
.
canvasTxt
.
closePath
()
this
.
points
.
push
(
obj
)
}
},
// 签名结束
backTo
(){
if
(
this
.
showTable
!=
''
){
this
.
$router
.
push
({
path
:
"/"
+
this
.
backto
,
query
:{
showTable
:
this
.
showTable
}
});
}
else
{
this
.
$router
.
push
({
path
:
"/"
+
this
.
backto
});
}
},
getdanjuList
(){
this
.
apiJavaPost
(
"/api/property/GetAuditChangeLogPageList"
,
this
.
danjuMsg
,
res
=>
{
...
...
@@ -372,6 +583,13 @@ export default {
this
.
Error
(
"制单人跟审核人不能相同哟,请转交!"
);
return
;
}
if
(
this
.
needSign
){
if
(
this
.
addMsg
.
SignImage
==
""
){
this
.
Error
(
"请签名!"
);
return
;
}
}
this
.
addMsg
.
AuditType
=
num
;
this
.
addMsg
.
ImageList
=
this
.
uploadImgList
;
this
.
apiJavaPost
(
"/api/property/AuditOrRefund"
,
this
.
addMsg
,
...
...
@@ -434,7 +652,12 @@ export default {
this
.
IsBoHui
=
true
;
break
;
}
if
(
this
.
GetDetail
.
AuditSteps
[
i
].
NextStep
==
1
&&
this
.
GetDetail
.
AuditSteps
[
i
].
SpecialNode
==
1
){
this
.
needSign
=
true
;
break
;
}
}
this
.
GetDetail
.
FirstStr
=
this
.
GetDetail
.
SourceName
.
slice
(
0
,
1
)
this
.
GetDetail
.
AuditSteps
=
list
;
...
...
@@ -451,6 +674,99 @@ export default {
</
script
>
<
style
>
.approvalDetails
.signSpan
{
display
:
inline-block
;
width
:
100px
;
height
:
34px
;
line-height
:
34px
;
border-radius
:
22px
;
text-align
:
center
;
cursor
:
pointer
;
font-size
:
12px
;
font-family
:
"宋体"
;
background
:
#FFA475
;
color
:
#fff
;
}
.approvalDetails
{
position
:
relative
;
}
.approvalDetails
.zindex
{
z-index
:
9999
!important
;
opacity
:
1
!important
;
}
.approvalDetails
.signature
{
width
:
600px
;
background
:
#fff
;
padding
:
15px
;
border-radius
:
20px
;
cursor
:
pointer
;
}
.approvalDetails
.Sign
{
position
:
fixed
;
width
:
100%
;
height
:
100%
;
top
:
0
;
left
:
0
;
background
:
rgba
(
0
,
0
,
0
,
.4
);
z-index
:
-500
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
opacity
:
0
;
}
.approvalDetails
.Sign
.signatureBox
{
width
:
100%
;
height
:
300px
;
box-sizing
:
border-box
;
overflow
:
hidden
;
background
:
#fff
;
z-index
:
100
;
display
:
flex
;
flex-direction
:
column
;
margin-top
:
20px
;
padding
:
0
20px
;
box-sizing
:
border-box
;
}
.Sign
.canvasBox
{
box-sizing
:
border-box
;
flex
:
1
;
}
.approvalDetails
.Sign
canvas
{
border
:
1px
solid
#7d7d7d
;
}
.approvalDetails
.Sign
.btnBox
{
padding
:
10px
;
text-align
:
center
;
}
.approvalDetails
.Sign
.btnBox
button
:first-of-type
{
background
:
transparent
;
border-radius
:
4px
;
height
:
40px
;
width
:
80px
;
font-size
:
14px
;
}
.approvalDetails
.Sign
.btnBox
button
:last-of-type
{
background
:
#71b900
;
color
:
#fff
;
border-radius
:
4px
;
height
:
40px
;
width
:
80px
;
font-size
:
14px
;
}
.approvalDetails
.backTo
{
width
:
80px
;
height
:
34px
;
line-height
:
34px
;
background
:
rgba
(
0
,
210
,
214
,
1
);
border-radius
:
17px
;
text-align
:
center
;
color
:
#fff
;
font-size
:
12px
;
font-family
:
"宋体"
;
display
:
inline-block
;
margin-left
:
15px
;
cursor
:
pointer
;
}
.detailsIT_Journal
.InfoChangeLog
{
height
:
auto
;
max-height
:
220px
;
background-color
:
#FFFFFF
;}
.detailsIT_Journal
.changLogList
{
padding-left
:
20px
;
max-height
:
180px
;
overflow
:
auto
;}
.detailsIT_Journal
.changLogList_l
{
border-left
:
1px
solid
#E9E9E9
;
position
:
relative
;
padding-bottom
:
10px
;
padding-left
:
20px
;
padding-top
:
10px
;}
...
...
@@ -548,10 +864,10 @@ export default {
.approvalDetails
._more
._right_content
.iconfont
{
color
:
#AAAAAA
}
.approvalDetails
._more
._right_content
._name
._n
{
font-size
:
14px
;
color
:
#333333
;
font-weight
:
bold
;
padding-left
:
3px
;}
.approvalDetails
._pb_son
{
position
:
relative
;
padding-left
:
75px
;
min-height
:
100px
;
padding-bottom
:
30px
}
.approvalDetails
._left_radius
{
width
:
40px
;
height
:
40px
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
40px
;
background-color
:
#00D2D6
;
color
:
white
;
font-size
:
12px
;
position
:
absolute
;
left
:
15px
;
z-index
:
2
;
}
.approvalDetails
._left_radius
{
width
:
40px
;
height
:
40px
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
40px
;
background-color
:
#00D2D6
;
color
:
white
;
font-size
:
12px
;
position
:
absolute
;
left
:
15px
;}
.approvalDetails
._left_radius_err
{
background-color
:
#E95252
!important
;}
.approvalDetails
._left_radius_sus
{
background-color
:
#FFA475
!important
;}
.approvalDetails
._pb_son
::after
{
content
:
''
;
width
:
4px
;
height
:
100%
;
background-color
:
#00D2D6
;
display
:
inline-block
;
position
:
absolute
;
clear
:
both
;
left
:
33px
;
top
:
0
;
z-index
:
1
}
.approvalDetails
._pb_son
::after
{
content
:
''
;
width
:
4px
;
height
:
100%
;
background-color
:
#00D2D6
;
display
:
inline-block
;
position
:
absolute
;
clear
:
both
;
left
:
33px
;
top
:
0
;}
.approvalDetails
._pb_son._none_after
::after
{
content
:
''
;
display
:
none
}
.approvalDetails
._pb_son._bohui_after
::after
{
background-color
:
#E95252
!important
;
display
:
inline-block
}
.approvalDetails
._process_box
{
padding-top
:
30px
;
padding-bottom
:
40px
;}
...
...
src/components/approval/approvalMan.vue
View file @
38272837
...
...
@@ -100,26 +100,26 @@
{{
item
.
AuditStatusName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
SourceName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
OrderCode
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<span
v-if=
"item.TempleteId>0"
style=
"text-decoration: underline;"
@
click=
"See(item,'approvalDetails','approvalMan','chakan')"
>
{{
item
.
OrderCode
}}
</span>
<span
v-else
>
{{
item
.
OrderCode
}}
</span>
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<p>
{{
item
.
EmName
}}
</p>
<p>
{{
item
.
Time
}}
</p>
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
></td>
<td>
{{
delist
.
CategoryName
}}
</td>
<td>
{{
delist
.
PropertyName
}}
</td>
<td>
{{
delist
.
PropertyNum
}}
</td>
<td>
{{
delist
.
BrandName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
UpdateBy
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"查看"
placement=
"top"
>
<img
@
click=
"See(item,'approvalDetails','chakan')"
style=
"width:24px;height:24px"
src=
"../../assets/img/chakan.png"
alt=
""
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"流程查看"
placement=
"top"
>
<img
v-if=
"item.TempleteId>0"
@
click=
"See(item,'approvalDetails','approvalMan','chakan')"
style=
"width:24px;height:24px"
src=
"../../assets/img/chakan.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"审批"
placement=
"top"
>
<img
v-show=
"showTable==1"
@
click=
"See(item,'approvalDetails','shenpi')"
style=
"width:24px;height:24px"
src=
"../../assets/img/shenpi.png"
alt=
""
>
<img
v-show=
"showTable==1"
@
click=
"See(item,'approvalDetails','
approvalMan','
shenpi')"
style=
"width:24px;height:24px"
src=
"../../assets/img/shenpi.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"转交"
placement=
"top"
>
<img
v-show=
"showTable==1"
@
click=
"ZhuanJiao(item)"
style=
"width:24px;height:24px"
src=
"../../assets/img/huifu.png"
alt=
""
>
...
...
@@ -249,6 +249,10 @@ export default {
}
},
created
(){
this
.
showTable
=
this
.
$route
.
query
.
showTable
?
this
.
$route
.
query
.
showTable
:
1
;
},
mounted
(){
this
.
getList
();
this
.
getNode
();
...
...
@@ -283,16 +287,17 @@ export default {
},
ZhuanJiao
(
item
){
this
.
dialogState
=
true
;
console
.
log
(
"item"
,
item
);
this
.
addMsg
.
WorkFlowId
=
item
.
Id
;
},
See
(
item
,
path
,
type
){
See
(
item
,
path
,
backto
,
type
){
let
shenpistr
=
type
;
this
.
$router
.
push
({
path
:
"/"
+
path
,
query
:
{
Id
:
item
.
Id
,
backto
:
backto
,
showTable
:
this
.
showTable
,
compType
:
shenpistr
,
}
});
...
...
@@ -335,7 +340,6 @@ export default {
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
StateEnumList
=
res
.
data
.
data
;
console
.
log
(
"this.StateEnumList"
,
this
.
StateEnumList
)
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
...
...
@@ -369,7 +373,6 @@ export default {
this
.
apiJavaPost
(
"/api/property/GetPropertyWaitMyAuditPageList"
,
this
.
msg
,
res
=>
{
this
.
loading
=
false
;
// console.log("res",res);
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
...
...
@@ -386,7 +389,6 @@ export default {
this
.
apiJavaPost
(
"/api/property/GetPropertyMyAuditedPageList"
,
this
.
msg
,
res
=>
{
this
.
loading
=
false
;
// console.log("res",res);
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
...
...
@@ -403,7 +405,6 @@ export default {
this
.
apiJavaPost
(
"/api/property/GetPropertyMyStartedPageList"
,
this
.
msg
,
res
=>
{
this
.
loading
=
false
;
// console.log("res",res);
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
tableData
=
res
.
data
.
data
.
pageData
;
this
.
total
=
res
.
data
.
data
.
count
;
...
...
@@ -432,7 +433,6 @@ export default {
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
SourceList
=
res
.
data
.
data
;
console
.
log
(
"this.SourceList"
,
this
.
SourceList
)
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
...
...
@@ -452,6 +452,7 @@ export default {
padding
:
20px
30px
;
box-sizing
:
border-box
;
background
:
#F8FAFB
;
}
</
style
>
src/components/assetsman/PaiTui.vue
View file @
38272837
...
...
@@ -114,8 +114,8 @@
<el-tooltip
class=
"item"
effect=
"dark"
content=
"终止"
placement=
"top"
>
<img
v-if=
"item.AuditStatus==2 && item.CreateBy==EmployeeId"
@
click=
"End(item)"
style=
"width:24px;height:24px"
src=
"../../assets/img/jinyong.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"查看"
placement=
"top"
>
<img
v-if=
"item.TempleteId
==0"
@
click=
"See(item,'approvalDetails
','chakan')"
style=
"width:24px;height:24px"
src=
"../../assets/img/chakan.png"
alt=
""
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"
流程
查看"
placement=
"top"
>
<img
v-if=
"item.TempleteId
>0"
@
click=
"See(item,'approvalDetails','PaiTui
','chakan')"
style=
"width:24px;height:24px"
src=
"../../assets/img/chakan.png"
alt=
""
>
</el-tooltip>
</td>
...
...
@@ -219,12 +219,18 @@
<td>
{{
delist
.
CancelStockEmployeeName
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
{{
item
.
Time
}}
</td>
<td
:rowspan=
"item.DetailList.length"
v-if=
"index==0"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"编辑"
placement=
"top"
>
<img
v-if=
"item.AuditStatus==3 && item.CreateBy==EmployeeId"
@
click=
"Edit1(item)"
style=
"width:24px;height:24px"
src=
"../../assets/img/edit.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"删除"
placement=
"top"
>
<img
v-if=
"item.AuditStatus==3 || item.AuditStatus==5"
@
click=
"DeleteTuiku(item)"
style=
"width:24px;height:24px"
src=
"../../assets/img/delete.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"终止"
placement=
"top"
>
<img
v-if=
"item.AuditStatus==2"
@
click=
"EndTuiku(item)"
style=
"width:24px;height:24px"
src=
"../../assets/img/jinyong.png"
alt=
""
>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"流程查看"
placement=
"top"
>
<img
v-if=
"item.TempleteId>0"
@
click=
"See(item,'approvalDetails','PaiTui','chakan')"
style=
"width:24px;height:24px"
src=
"../../assets/img/chakan.png"
alt=
""
>
</el-tooltip>
</td>
</tr>
...
...
@@ -334,6 +340,7 @@
</div>
</el-form>
</el-dialog>
<el-dialog
title=
"退库单"
:visible
.
sync=
"dialogState1"
...
...
@@ -633,6 +640,7 @@ export default {
// this.tableHeight=document.body.clientHeight-40-66-87;
let
userInfo
=
this
.
getLocalStorage
();
this
.
EmployeeId
=
userInfo
.
EmployeeId
;
this
.
showTable
=
this
.
$route
.
query
.
showTable
?
this
.
$route
.
query
.
showTable
:
1
;
},
mounted
(){
this
.
getList
();
...
...
@@ -641,10 +649,28 @@ export default {
},
methods
:{
// 退库单编辑
Edit1
(
item
){
this
.
addMsg1
.
Id
=
item
.
Id
;
this
.
addMsg1
.
BackTime
=
item
.
Time
;
this
.
addMsg1
.
Remark
=
item
.
Remark
;
this
.
addMsg1
.
DetailList
=
[];
this
.
wlItemList
=
[];
item
.
DetailList
.
forEach
(
item
=>
{
item
.
Name
=
item
.
PropertyName
;
item
.
PropertyStatusName
=
"修改"
;
this
.
wlItemList
.
push
(
item
);
})
this
.
dialogState1
=
true
;
this
.
ItemCheckList
=
[];
},
// 编辑
Edit
(
item
){
console
.
log
(
"item"
,
item
)
this
.
addMsg
.
EmployeeId
=
item
.
EmployeeId
;
this
.
addMsg
.
Id
=
item
.
Id
;
this
.
addMsg
.
Time
=
item
.
Time
;
this
.
addMsg
.
Remark
=
item
.
Remark
;
...
...
@@ -652,19 +678,22 @@ export default {
this
.
wlItemList
=
[];
item
.
DetailList
.
forEach
(
item
=>
{
item
.
Name
=
item
.
PropertyName
;
item
.
PropertyStatusName
=
"修改"
;
this
.
wlItemList
.
push
(
item
);
})
this
.
EmName
=
item
.
EmName
;
this
.
getEmployee
(
2
);
this
.
dialogState
=
true
;
this
.
ItemCheckList
=
[];
},
See
(
item
,
path
,
type
){
See
(
item
,
path
,
backto
,
type
){
let
shenpistr
=
type
;
this
.
$router
.
push
({
path
:
"/"
+
path
,
query
:
{
Id
:
item
.
Id
,
backto
:
backto
,
showTable
:
this
.
showTable
,
compType
:
shenpistr
,
}
});
...
...
@@ -775,12 +804,13 @@ export default {
if
(
this
.
ItemCheckList
.
length
==
0
){
return
;
}
this
.
$confirm
(
"确认移出资产?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
'warning'
}).
then
(()
=>
{
var
set
=
this
.
ItemCheckList
.
map
(
item
=>
item
.
Id
)
var
set
=
this
.
ItemCheckList
.
map
(
item
=>
item
.
Property
Id
)
var
resArr
=
this
.
wlItemList
.
filter
(
item
=>!
set
.
includes
(
item
.
PropertyId
))
this
.
wlItemList
=
resArr
;
this
.
addMsg
.
Money
=
0
;
...
...
@@ -797,6 +827,7 @@ export default {
this
.
wlcheckList
=
[];
this
.
wlisCkedAll
=
false
;
},
// 选择资产
chooseWu
(){
this
.
wlcheckList
.
forEach
(
item
=>
{
this
.
wlItemList
.
push
(
item
);
...
...
src/components/assetsman/assetsList.vue
View file @
38272837
...
...
@@ -99,9 +99,8 @@
<td>
{{
item
.
PropertyModel
}}
</td>
<td>
<p
v-if=
"item.EmName!=''"
>
使用人名称:
{{
item
.
EmName
}}
</p>
<p
v-if=
"item.GetTime!=''"
style=
"padding:2px 0"
>
使用时间:
{{
item
.
GetTime
}}
</p>
<!--
<p>
归还时间:
{{
item
.
BackTime
}}
</p>
-->
<p>
{{
item
.
EmName
}}
</p>
<p
style=
"padding:2px 0"
>
{{
item
.
GetTime
}}
</p>
</td>
<td>
...
...
@@ -295,18 +294,25 @@
:visible
.
sync=
"caozuoState"
top=
"3%"
width=
"850px"
>
<div
class=
"f12"
>
<span>
资产名称:
{{
OperationInfo
.
Name
}}
</span>
<span
style=
"margin:0 20px"
>
资产编码:
{{
OperationInfo
.
PropertyNum
}}
</span>
</div>
<table
class=
"myTable"
v-loading=
"loading"
border=
"0"
cellspacing=
"0"
cellpadding=
"0"
>
<thead>
<th>
类型
</th>
<th>
内容
</th>
<th>
操作人
</th>
<th>
操作人
/时间
</th>
<th>
操作时间
</th>
</thead>
<tbody>
<tr
v-for=
"(item,index) in OperationList"
:key=
"index"
>
<td>
{{
item
.
TypeName
}}
</td>
<td>
{{
item
.
Content
}}
</td>
<td>
{{
item
.
CreateBy
}}
</td>
<td>
<p>
{{
item
.
CreateBy
}}
</p>
<p>
{{
item
.
CreateDate
}}
</p>
</td>
<td>
{{
item
.
CreateDate
}}
</td>
</tr>
<tr
v-show=
"OperationList.length==0"
>
...
...
@@ -432,6 +438,7 @@ export default {
PropertyId
:
''
,
},
OperationList
:[],
OperationInfo
:{},
OperationLoad
:
false
,
EmployeeList1
:[],
EmployeeList2
:[],
...
...
@@ -449,6 +456,7 @@ export default {
},
methods
:{
Operation
(
item
){
this
.
OperationInfo
=
item
;
this
.
caozuoState
=
true
;
this
.
msg1
.
PropertyId
=
item
.
Id
;
this
.
getOperation
();
...
...
@@ -649,7 +657,6 @@ export default {
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
PropertyStatusList
=
res
.
data
.
data
;
console
.
log
(
"状态"
,
this
.
PropertyStatusList
)
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
...
...
src/components/global/index.vue
View file @
38272837
...
...
@@ -102,13 +102,13 @@ export default {
top
:
0
;
left
:
0
;
height
:
100%
;
z-index
:
1
00
;
z-index
:
1
;
}
.appContent
.HeadDiv
{
position
:
fixed
;
width
:
calc
(
100%
-
214px
);
top
:
0
;
z-index
:
200
;
z-index
:
1
;
background
:
#fff
;
padding
:
20px
0
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment