继续完善

main
yanzai 2 years ago
parent bc5eccbe77
commit ffaf379ab3

Binary file not shown.

@ -0,0 +1,75 @@
<?php
namespace App\Http\Controllers\API\Third;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class EntrustController extends Controller
{
//创建医嘱记录进入 s_list表
public function CreateRecord()
{
$Info = request('info');
$params=[
'list_status'=>0,
'reg_num'=>$Info['reg_num'] ?? null,
'user_name'=>$Info['user_name'] ?? null,
'user_sex'=>$Info['user_sex'] ?? null,
'entrust'=>$Info['entrust'] ?? null,
'is_pay'=>$Info['is_pay'] ?? null,
'reservation_department'=>$Info['reservation_department'] ?? null,
'entrust_date'=>$Info['entrust_date'] ?? null,
'entrust_time'=>$Info['entrust_time'] ?? null,
'user_brithday'=>$Info['user_brithday'] ?? null,
'docotr'=>$Info['docotr'] ?? null,
'patient_type'=>$Info['patient_type'] ?? null,
'user_phone'=>$Info['user_phone'] ?? null,
'implement_department'=>$Info['implement_department'] ?? null,
'entrust_id'=>$Info['entrust_id'] ?? null,//his传过来的本地医嘱id
'episodeid'=>$Info['episodeid'] ?? null, //就诊号
'RISRExamID'=>$Info['RISRExamID'] ?? null, //检查号
'RISRAcceptDeptCode'=>$Info['RISRAcceptDeptCode'] ?? null, //接收科室代码
];
$requiredFields = [
'reg_num', 'user_name', 'user_sex', 'entrust', 'is_pay',
'reservation_department', 'entrust_date', 'entrust_time',
'user_brithday', 'docotr', 'patient_type', 'user_phone',
'implement_department', 'entrust_id', 'episodeid',
'RISRExamID', 'RISRAcceptDeptCode'
];
// 判断是否为空
foreach ($requiredFields as $field) {
if (!isset($params[$field]) || $params[$field] === null) {
return \Yz::echoError1('参数'.$field.'不能为空');
}
}
DB::beginTransaction();
$insertListId=DB::table('s_list')->insertGetId($params);
if($insertListId){
$data=[
'list_id'=>$insertListId,
'reg_num'=>$Info['reg_num'],
'new_status'=>0,
'create_user'=>'接口',
'note'=>'创建记录',
'data'=>json_encode($Info,JSON_UNESCAPED_UNICODE),//原始数据
];
$insertLog=DB::table('s_list_log')->insert($data);
if($insertLog){
DB::commit();
return \Yz::Return(true,'保存成功',[]);
}else{
DB::rollBack();
return \Yz::echoError1('保存失败');
}
}else{
DB::rollBack();
return \Yz::echoError1('保存失败');
}
}
}

@ -12,7 +12,7 @@ class ToolsController extends Controller
{ {
date_default_timezone_set('PRC'); date_default_timezone_set('PRC');
$d=date("Y-m-d H:i:s"); $d=date("Y-m-d H:i:s");
//$d=('2022-12-31 12:12:12'); // $d=('2022-12-05 12:12:12');
return \Yz::Return(true,'获取成功',['datetime'=>$d]); return \Yz::Return(true,'获取成功',['datetime'=>$d]);
} }
} }

@ -3,13 +3,9 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title></title> <title></title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" <script src="js/jquery-1.12.4.min.js" crossorigin="anonymous"></script>
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script> <link rel="stylesheet" href="css/bootstrap.min.css" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" <script src="js/bootstrap.min.js" crossorigin="anonymous"></script>
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"
integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
crossorigin="anonymous"></script>
<script src="js/bootstrap-datetimepicker.min.js"></script> <script src="js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="js/locales/bootstrap-datetimepicker.zh-CN.js" charset="UTF-8"></script> <script type="text/javascript" src="js/locales/bootstrap-datetimepicker.zh-CN.js" charset="UTF-8"></script>
<link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css"> <link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -101,7 +101,7 @@ Route::post('admin/GetEnablePlan','App\Http\Controllers\API\Admin\YeWu\PlanListC
Route::post('admin/PlanYuYue','App\Http\Controllers\API\Admin\YeWu\PlanListController@YuYue');//开始预约 Route::post('admin/PlanYuYue','App\Http\Controllers\API\Admin\YeWu\PlanListController@YuYue');//开始预约
//H5端接口 //H5端接口
Route::post('H5/Login','App\Http\Controllers\API\H5\LoginController@Login'); Route::post('H5/Login','App\Http\Controllers\API\H5\LoginController@Login')->middleware('log');
Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { //路由分组 Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { //路由分组
Route::post('H5/EntrustGetList','App\Http\Controllers\API\H5\EntrustController@GetList');//获取个人医嘱列表 Route::post('H5/EntrustGetList','App\Http\Controllers\API\H5\EntrustController@GetList');//获取个人医嘱列表
@ -111,4 +111,10 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () {
}); });
//对外接口
Route::group(['middleware'=>['check.sign','log'],'prefix'=>'v1'],function () {
Route::post('T/CreateEntrustRecord','App\Http\Controllers\API\Third\EntrustController@CreateRecord');//获取个人医嘱列表
});

@ -1,4 +1,3 @@
ENV = 'production' ENV = 'production'
VITE_APP_API = 'https://yiji.yuluo.online/Laravel/public/api/' VITE_APP_API = 'http://10.50.120.166/YiJiYuYue/Laravel/public/api/'
VITE_APP_FILE = 'https://yiji.yuluo.online/Laravel/public/' VITE_APP_FILE = 'http://10.50.120.166/YiJiYuYue/Laravel/public/'

Binary file not shown.

@ -1,984 +0,0 @@
/*
--------------------------------------------------------------
* FileName:xtxsync.js
* This Javascript provides synchronous interfaces
* Support bjca client version 3.4.1 and later
* Author:BJCA-zys
* Date: 2021-05-06
*
--------------------------------------------------------------
*/
(function() {
if (typeof xtxsync === 'undefined') {
xtxsync = {};
}
})();
// initialize xtxsync hashMap object
(function() {
function xtxsyncHashMap(){
this.map = {};
}
xtxsyncHashMap.prototype = {
put : function(key , value){
this.map[key] = value;
},
get : function(key){
if(this.map.hasOwnProperty(key)){
return this.map[key];
}
return null;
},
remove : function(key){
if(this.map.hasOwnProperty(key)){
return delete this.map[key];
}
return false;
},
removeAll : function(){
this.map = {};
},
keySet : function(){
var _keys = [];
for(var i in this.map){
_keys.push(i);
}
return _keys;
}
};
xtxsyncHashMap.prototype.constructor = xtxsyncHashMap;
xtxsync.HashMap = xtxsyncHashMap;
})();
// initialize xtxsync util object
(function() {
function initUtilObject(xtxsync) {
var util = xtxsync.util = xtxsync.util || {};
util.checkBrowserISIE = function() {
return (!!window.ActiveXObject || 'ActiveXObject' in window) ? true : false;
}
util.checkLocationIsHttps = function() {
return 'https:' == document.location.protocol ? true: false;
}
util.evalFunction = function (func) {
if (typeof func === 'function') {
return func;
} else if (typeof func === 'string') {
cb = eval(func);
} else {
return null;
}
}
util.consolelog = function(param) {
if (window.console == undefined || window.console.log == undefined) {
return;
}
console.log(param);
}
util.isEmpty = function(param) {
if (!param) {
return true;
}
if (typeof param == 'string' && param == "") {
return true;
}
return false;
}
util.loadIECtl = function(clsid, ctlName, checkFunc) {
if (!util.checkBrowserISIE()) {
return null;
}
var ctl = document.getElementById(ctlName);
if (ctl) {
return ctl;
}
try {
var loadObjString = '<object id="' + ctlName + '" classid="CLSID:' + clsid + '" style="HEIGHT:0px; WIDTH:0px">';
loadObjString += '</object>';
document.write(loadObjString);
if (checkFunc != null && checkFunc != "" && eval(ctlName + "." + checkFunc) == undefined) {
return null;
}
} catch (e) {
util.consolelog(e);
return null;
}
return document.getElementById(ctlName);
}
util.getAutoExecFunctionString = function (func) {
var ret = "(";
ret += func.toString();
ret += ")()";
return ret;
}
util.attachIEEvent = function(ctlName, eventName, eventFunc) {
var ctl;
if (typeof ctlName === 'string') {
ctl = eval(ctlName);
} else {
ctl = ctlName;
}
eventName = eventName.toLowerCase();
var cb = util.evalFunction(eventFunc);
if (cb == null) {
return;
}
if (ctl.attachEvent) {
ctl.attachEvent(eventName, cb);
} else { // IE11 not support attachEvent, and addEventListener do not work well, so addEvent ourself
var handler = document.createElement("script");
handler.setAttribute("for", ctlName);
handler.setAttribute("event", eventName);
var eventScript = util.getAutoExecFunctionString(eventFunc);
handler.appendChild(document.createTextNode(eventScript));
document.getElementsByTagName("head")[0].appendChild(handler);
}
}
util.loadWebSocketCtl = function(wsUrl, wssUrl) {
if (xtxsync.wsObject) {
return xtxsync.wsObject;
}
var url;
if (util.checkLocationIsHttps()) {
url = "wss://" + wssUrl;
} else {
url = "ws://" + wsUrl;
}
var wsObject = {
socket : undefined,
wsEventQueue : new xtxsync.HashMap(),
wsURL : url
};
xtxsync.wsObject = wsObject;
xtxsync.wsObject.wsEventQueue.put("onusbkeychange", util.evalFunction(xtxsync.custom.defaultUsbkeyChange));
try {
wsObject.socket = new WebSocket(url);
} catch (e) {
util.consolelog(e);
return null;
}
wsObject.socket.onopen = function(evt) {
xtxsync.util.consolelog("open websocket[" + url + "] ok...");
xtxsync.util.consolelog("SOF_GetVersion:(" + xtxsync.SOF_GetVersion() + ")");
}
wsObject.socket.onclose = function(evt) {
util.consolelog("websocket[" + url + "] closed, reopen it...");
xtxsync.wsObject = undefined;
xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl(wsUrl, wssUrl);
};
wsObject.socket.onmessage = function(evt) {
var eventCmd = false;
if (xtxsync.util.isEmpty(evt.data)) {
util.consolelog("onmessage evt.data is NULL or empty!!!");
return;
}
try {
var res = JSON.parse(evt.data);
var cmdId = undefined;
if (res['call_cmd_id']) {
cmdId = res['call_cmd_id'];
} else {
util.consolelog("return JSON not include call_cmd_id!!!");
return;
}
var retVal = "";
if (res['retVal']) {
retVal = res['retVal'];
} else if (res['retValue']) {
retVal = res['retValue'];
}
var execFunc = xtxsync.wsObject.wsEventQueue.get(cmdId.toLowerCase());
if (execFunc && typeof execFunc == 'function') { // event
execFunc(retVal);
}
} catch (e) {
return;
}
};
wsObject.socket.onerror = function(evt) {
xtxsync.util.consolelog(evt.data);
};
return wsObject;
}
util.attachWebSocketEvent = function(wsObject, eventName, eventFunc) {
if (wsObject == null) {
return;
}
wsObject.wsEventQueue.put(eventName.toLowerCase(), util.evalFunction(eventFunc));
}
util.createHttpRequest = function() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
util.ajaxSyncall = function(clsid, methodName, outPramType, argsArray) {
var defaultErrRet;
if (outPramType == 'bool') {
defaultErrRet = false;
} else if (outPramType == 'number') {
defaultErrRet = -1;
} else {
defaultErrRet = "";
}
try {
var xhr = xtxsync.util.createHttpRequest();
var strUrl = "http://127.0.0.1:21051/synctl";
if (util.checkLocationIsHttps()) {
strUrl = "https://127.0.0.1:21061/synctl";
}
xhr.open("POST", strUrl, false);
xhr.setRequestHeader("Content-type","application/json");
var sendArray = {
url:window.location.href,
clsid:clsid,
func:methodName,
param:argsArray
};
var token = xtxsync.custom.getToken();
if (token != "") {
sendArray.token = token;
}
xhr.send(JSON.stringify(sendArray));
if (xhr.status != 200) {
if (methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') {
xtxsync.custom.setToken("");
}
return defaultErrRet;
}
var res = JSON.parse(xhr.responseText);
if (res.token) {
xtxsync.custom.setToken(res.token);
}
var ret = defaultErrRet;
if (res.hasOwnProperty('retValue')) {
ret = res.retValue;
} else if (res.hasOwnProperty('retVal')) {
if (outPramType == "bool"){
if (typeof(res.retVal) == 'string') {
ret = res.retVal == "true" ? true : false;
} else {
ret = res.retVal;
}
} else if (outPramType == "number"){
if (typeof(res.retVal) == 'string') {
ret = Number(res.retVal);
} else {
ret = res.retVal;
}
} else{
ret = res.retVal;
}
}
if (ret == undefined) {
ret = defaultErrRet;
}
if (((methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') && !ret) || (methodName == 'SOF_Logout' && ret)) {
xtxsync.custom.setToken("");
}
return ret;
} catch (e) {
return defaultErrRet;
}
}
}
return initUtilObject(xtxsync);
})();
// initialize index page and other custom action
(function() {
function initCustomActions(xtxsync) {
var custom = xtxsync.custom = xtxsync.custom || {};
custom.softCertListID = "";
custom.hardCertListID = "";
custom.allCertListID = "";
custom.loginCertID = "";
custom.logoutFunc = null;
custom.UsbkeyChangeFunc = null;
custom.loginToken = "";
custom.errorReportFunc = function(msg) {
alert(msg);
}
custom.setAutoLogoutParameter = function(strCertID, logoutFunc) {
var custom = xtxsync.custom;
custom.loginCertID = strCertID;
custom.logoutFunc = logoutFunc;
}
custom.clearDropList = function(dropListId) {
if (dropListId == "") {
return;
}
var obj = document.getElementById(dropListId);
if (obj == undefined) {
obj = eval(dropListId);
}
if (obj == undefined) {
return;
}
var i, n = obj.length;
for (i = 0; i < n; i++) {
obj.remove(0);
}
}
custom.pushOneDropListBox = function(userListArray, strListID)
{
var obj = document.getElementById(strListID);
if (obj == undefined) {
obj = eval(strListID);
}
if (obj == undefined) {
return;
}
for (var i = 0; i < userListArray.length; i++) {
var certObj = userListArray[i];
var objItem = new Option(certObj.certName, certObj.certID);
obj.options.add(objItem);
}
return;
}
custom.pushUserListToAllDroplist = function(strUserList) {
var custom = xtxsync.custom;
custom.clearDropList(custom.softCertListID);
custom.clearDropList(custom.hardCertListID);
custom.clearDropList(custom.allCertListID);
var allListArray = [];
while (true) {
var i = strUserList.indexOf("&&&");
if (i <= 0 ) {
break;
}
var strOneUser = strUserList.substring(0, i);
var strName = strOneUser.substring(0, strOneUser.indexOf("||"));
var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length);
allListArray.push({certName:strName, certID:strCertID});
if (custom.hardCertListID != "") {
var devType = xtxsync.GetDeviceInfo(strCertID, 7);
if (devType == "HARD") {
custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.hardCertListID);
}
}
if (custom.softCertListID != "") {
var devType = xtxsync.GetDeviceInfo(strCertID, 7);
if (devType == "SOFT") {
custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.softCertListID);
}
}
var len = strUserList.length;
strUserList = strUserList.substring(i + 3, len);
}
if (custom.allCertListID != "") {
custom.pushOneDropListBox(allListArray, custom.allCertListID);
}
}
custom.setUserCertList = function(certListId, certType) {
var custom = xtxsync.custom;
if (certType == CERT_TYPE_ALL || certType == undefined) {
custom.allCertListID = certListId;
}
if (certType == CERT_TYPE_HARD) {
custom.hardCertListID = certListId;
}
if (certType == CERT_TYPE_SOFT) {
custom.softCertListID = certListId;
}
custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList());
}
custom.setOnUsbKeyChangeCallBack = function(callback) {
xtxsync.custom.UsbkeyChangeFunc = callback;
}
custom.setErrorReportFunc = function(errFunc) {
xtxsync.custom.errorReportFunc = errFunc;
}
custom.autoLogoutCallBack = function(strUserList) {
var custom = xtxsync.custom;
if (strUserList.indexOf(custom.loginCertID) <= 0) {
custom.logoutFunc();
}
}
custom.defaultUsbkeyChange = function() {
var custom = xtxsync.custom;
custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList());
if (typeof custom.UsbkeyChangeFunc == 'function') {
custom.UsbkeyChangeFunc();
}
if (custom.loginCertID != "" && typeof custom.logoutFunc == 'function') {
custom.autoLogoutCallBack(xtxsync.SOF_GetUserList());
}
}
custom.getToken = function() {
return custom.loginToken;
}
custom.setToken = function(token) {
custom.loginToken = token;
}
}
return initCustomActions(xtxsync);
})();
// initialize xtxappcom object
(function() {
function initXTXAppCOM(xtxsync) {
var util = xtxsync.util;
var custom = xtxsync.custom;
xtxsync.XTXAppCOM = util.loadIECtl(xtxsync.xtx_clsid, "XTXAppObj", "SOF_GetVersion()");
if (xtxsync.XTXAppCOM == null) {
custom.errorReportFunc("加载XTXAppCOM控件失败请确认已正确安装BJCA证书应用环境!");
return false;
}
var XTXAppCOM = xtxsync.XTXAppCOM;
util.attachIEEvent("XTXAppObj", "onUsbkeyChange", xtxsync.custom.defaultUsbkeyChange);
// get key pic interface
var GetPicObj = util.loadIECtl(xtxsync.getpic_clsid, "GetPicObj", "Hash('0')");
if (GetPicObj == null) {
//custom.errorReportFunc("加载GetKeyPic控件失败请确认已正确安装GetKeyPic控件!");
} else {
XTXAppCOM.GetPic = function(strCertID) {
return GetPicObj.GetPic(strCertID);
}
XTXAppCOM.Hash = function(inData) {
return GetPicObj.Hash(inData);
}
XTXAppCOM.ConvertPicFormat = function(inData, type) {
return GetPicObj.ConvertPicFormat(inData, type);
}
XTXAppCOM.ConvertGif2Jpg = function(inData) {
return GetPicObj.ConvertGif2Jpg(inData);
}
XTXAppCOM.GetPic1 = function(strCertID) {
return GetPicObj.GetPic1(strCertID);
}
XTXAppCOM.ConvertPicSize = function(strPicture, w, h) {
return GetPicObj.ConvertPicSize(strPicture, w, h);
}
}
// xtxversion interface
var XTXVersionOBJ = util.loadIECtl(xtxsync.xtx_version_clsid, "XTXVersionOBJ", "GetEnvVersion()");
if (XTXVersionOBJ == null) {
//custom.errorReportFunc("加载XTXVersion控件失败请确认已正确安装证书应用环境!");
} else {
XTXAppCOM.GetEnvVersion = function() {
return XTXVersionOBJ.GetEnvVersion();
}
}
return true;
}
function initXTXAppWebSocket(xtxsync) {
xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl("127.0.0.1:21051/xtxapp/", "127.0.0.1:21061/xtxapp/");
if (xtxsync.XTXAppWebSocket == null) {
custom.errorReportFunc("连接XTXAppCOM服务失败请确认已正确安装BJCA证书应用环境!");
return false;
}
return true;
}
function initXTXAppObject(xtxsync) {
var util = xtxsync.util;
xtxsync.xtx_clsid = "3F367B74-92D9-4C5E-AB93-234F8A91D5E6";
xtxsync.getpic_clsid = "3BC3C868-95B5-47ED-8686-E0E3E94EF366";
xtxsync.xtx_version_clsid = "574887FB-22A5-488B-A49C-2CF25F56BE68";
var getImplmentFunction;
if (util.checkBrowserISIE()) { // IE
if (!initXTXAppCOM(xtxsync)) {
return false;
}
getImplmentFunction = function(methodInfo) {
if (methodInfo.inParams == '') { // 0 input param
window[methodInfo.funcName] = new Function('return xtxsync.XTXAppCOM.' + methodInfo.funcName + '();');
} else {
window[methodInfo.funcName] = new Function(methodInfo.inParams,
'return xtxsync.XTXAppCOM.' + methodInfo.funcName + '(' + methodInfo.inParams + ');');
}
}
} else { // other brower
if (!initXTXAppWebSocket(xtxsync)) {
return false;
}
getImplmentFunction = function(methodInfo) {
if (methodInfo.inParams == '') { // 0 input param
window[methodInfo.funcName] = new Function(
"return xtxsync.util.ajaxSyncall('" +
methodInfo.clsid + "', '" + methodInfo.funcName + "', '" + methodInfo.outParamType + "');");
} else {
window[methodInfo.funcName] = new Function(methodInfo.inParams,
"return xtxsync.util.ajaxSyncall('" + methodInfo.clsid + "', '" +
methodInfo.funcName + "','" + methodInfo.outParamType + "', [" + methodInfo.inParams + "]);");
}
}
}
var export_functions = [
{funcName:'SOF_SetSignMethod', inParams:'SignMethod', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'SetSignMethod'},
{funcName:'SOF_GetSignMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SetEncryptMethod', inParams:'EncryptMethod', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetEncryptMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetUserList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetUserList'},
{funcName:'SOF_ExportUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetSignCert'},
{funcName:'SOF_Login', inParams:'CertID, PassWd', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyUserPIN'},
{funcName:'SOF_GetPinRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'GetUserPINRetryCount'},
{funcName:'SOF_ChangePassWd', inParams:'CertID, oldPass, newPass', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'ChangeUserPassword'},
{funcName:'SOF_GetCertInfo', inParams:'Cert, type', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertBasicinfo'},
{funcName:'SOF_GetCertInfoByOid', inParams:'Cert, Oid', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExtCertInfoByOID'},
{funcName:'SOF_SignData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignedData'},
{funcName:'SOF_VerifySignedData', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedData'},
{funcName:'SOF_SignFile', inParams:'CertID, InFile', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SOF_SignFile'},
{funcName:'SOF_VerifySignedFile', inParams:'Cert, InFile, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignFile'},
{funcName:'SOF_EncryptData', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncodeP7Enveloped'},
{funcName:'SOF_DecryptData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecodeP7Enveloped'},
{funcName:'SOF_EncryptFile', inParams:'Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_DecryptFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignMessage', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedMessage', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyDatabyP7'},
{funcName:'SOF_GetInfoFromSignedMessage', inParams:'SignedMessage, type', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignDataXML', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedDataXML', inParams:'InData', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetXMLSignatureInfo', inParams:'XMLSignedData, type', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GenRandom', inParams:'RandomLen', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GenerateRandom'},
{funcName:'SOF_PubKeyEncrypt', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PubKeyEncrypt'},
{funcName:'SOF_PriKeyDecrypt', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PriKeyDecrypt'},
{funcName:'SOF_SecertSegment', inParams:'Secert, m, n, k', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SecertRecovery', inParams:'Seg', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetLastError', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'GetDeviceCount', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'GetAllDeviceSN', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'GetDeviceSNByIndex', inParams:'iIndex', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'GetDeviceInfo', inParams:'sDeviceSN, iType', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ChangeAdminPass', inParams:'sDeviceSN, sOldPass, sNewPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'UnlockUserPass', inParams:'sDeviceSN, sAdminPass, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyType, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ImportSignCert', inParams:'sDeviceSN, sContainerName, sCert', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ImportEncCert', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ReadFile', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'readFile'},
{funcName:'WriteFile', inParams:'sDeviceSN, sFileName, sContent, bPrivate', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'writeFile'},
{funcName:'IsContainerExist', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'DeleteContainer', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ExportPKCS10', inParams:'sDeviceSN, sContainerName, sDN, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'InitDevice', inParams:'sDeviceSN, sAdminPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'AddSignInfo', inParams:'sUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_ExportExChangeUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExchCert'},
{funcName:'SOF_ValidateCert', inParams:'Cert', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'ValidateCert'},
{funcName:'GetENVSN', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SetENVSN', inParams:'sDeviceSN, sEnvsn', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'IsDeviceExist', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'GetContainerCount', inParams:'sDeviceSN', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SymEncryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncryptData'},
{funcName:'SOF_SymDecryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecryptData'},
{funcName:'SOF_SymEncryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'EncryptFile'},
{funcName:'SOF_SymDecryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'DecryptFile'},
{funcName:'SOF_GetLastErrMsg', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_Base64Encode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_Base64Decode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_HashData', inParams:'hashAlg, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_HashFile', inParams:'hashAlg, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'UnlockUserPassEx', inParams:'sDeviceSN, sAdminPin, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'DeleteOldContainer', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'WriteFileEx', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ReadFileEx', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'WriteFileBase64', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'DeleteFile', inParams:'sDeviceSN, sFileName', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EncryptDataEx', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'Base64EncodeFile', inParams:'sInFile', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetAllContainerName', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'CreateSoftDevice', inParams:'sDeviceSN, sLabel', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'DeleteSoftDevice', inParams:'sDeviceSN, sPasswd', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'EnableSoftDevice', inParams:'enable, sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SoftDeviceBackup', inParams:'sDeviceSN, sPasswd', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SoftDeviceRestore', inParams:'sDeviceSN, sPasswd, sInFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_Logout', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'Logout'},
{funcName:'SetUserConfig', inParams:'type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignByteData', inParams:'CertID, byteLen', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedByteData', inParams:'Cert, byteLen, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'OTP_GetChallengeCode', inParams:'sCertID', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ImportEncCertEx', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher, ulSymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetCertEntity', inParams:'sCert', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertEntity'},
{funcName:'SOF_HMAC', inParams:'hashid, key, indata', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignDataByPriKey', inParams:'sPriKey, sCert, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ImportKeyCertToSoftDevice', inParams:'sDeviceSN, sContainerName, sPriKey, sCert, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'InitDeviceEx', inParams:'sDeviceSN, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SelectFile', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignHashData', inParams:'CertID, b64ashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignHashData'},
{funcName:'SOF_VerifySignedHashData', inParams:'Cert, b64ashData, SignValue, hashAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedHashData'},
{funcName:'CheckSoftDeviceEnv', inParams:'', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'ImportPfxToDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfx, strPfxPass', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_HashDataEx', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_HashFileEx', inParams:'hashAlg, inFile, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'GetDeviceCountEx', inParams:'type', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'GetAllDeviceSNEx', inParams:'type', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_UpdateCert', inParams:'CertID, type', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'OpenSpecifiedFolder', inParams:'backupFilePath', outParamType:'', clsid:xtxsync.xtx_clsid},
{funcName:'OTP_GetChallengeCodeEx', inParams:'sCertID, szAccount, money', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'Base64DecodeFile', inParams:'sInData, sFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'EnumFilesInDevice', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'OTP_Halt', inParams:'sCertID', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_TSGenREQ', inParams:'b64Hash, hashAlg, bReqCert, policyID, b64Nonce, b64Extension', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_TSCompareNonce', inParams:'b64TSReq, b64TSAResp', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_TSGenPDFSignature', inParams:'b64TSAResp, b64OriPDFSignature', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_TSVerifyPDFSignature', inParams:'b64TSPDFSignature', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_TSGetPDFSignatureInfo', inParams:'b64TSPDFSignature, iType', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'OTP_GetState', inParams:'sCertID, bCert', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'OTP_GetSyncCode', inParams:'sCertID, ChallengeCode', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_IsLogin', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_LoginEx', inParams:'CertID, PassWd, updateFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'EnumSupportDeviceList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ExportPfxFromDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignHashMessage', inParams:'CertID, InHashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'ExportPfxToFile', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignAPK', inParams:'CertID, strOriSignature', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'YZT_GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyTypeRSA, iKeyTypeSM2', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'YZT_ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'YZT_ImportSignCert', inParams:'sDeviceSN, sContainerName, sRSACert, sSM2Cert', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'YZT_ImportEncCert', inParams:'sDeviceSN, sContainerName, sRSACert, sRSAPriKeyCipher, ulRSASymAlg, sSM2Cert, sSM2PriKeyCipher, ulSM2SymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_ListenUKey', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EnableLoginWindow', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignEnvelope', inParams:'CertID, Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_UnSignEnvelope', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_MAKExportPKCS10', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_MAKImportSignEncCert', inParams:'sDeviceSN, sSignCert, sEncCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_IssueDAKCert', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_InfoCollect', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_GetBioInfo', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetLastLoginCertID', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_ReadKFXESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SymDecryptFileToData', inParams:'sKey, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignMessageBase64', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedMessageBase64', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedHashMessage', inParams:'MessageData, InHashData', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignDataBase64', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedDataBase64', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_HashDataExBase64', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetProductVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_UpdateCertEx', inParams:'CertID, PassWd', outParamType:'number', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_GetLastSignDataCertID', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_SetUserConfig', inParams:'CertID, type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'BIO_InvokeCommand', inParams:'CertID, bstrCommand', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_ImportSymmKey', inParams:'CertID, ulKeyIndex, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EPS_Encrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EPS_Decrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EPS_Mac', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_PriKeyDecryptEx', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EPS_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_EPS_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'EnumESeal', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'GetPicture', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignEnvelopeFile', inParams:'CertID, Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_UnSignEnvelopeFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOFX_EncryptFile', inParams:'CertID, Cert, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOFX_DecryptFile', inParams:'CertID, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'GetPic', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'Hash', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'ConvertPicFormat', inParams:'inData, type', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'ConvertGif2Jpg', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'GetPic1', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'ConvertPicSize', inParams:'bstrPic, w, h', outParamType:'string', clsid:xtxsync.getpic_clsid},
{funcName:'GetEnvVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_version_clsid},
{funcName:'InitDeviceWithParam', inParams:'sDeviceSN, sAppName, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry, createFileRights', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SignDataEx', inParams:'CertID, InData,signFlag', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_VerifySignedDataEx', inParams:'Cert, InData, SignValue,signFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SymEncryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid},
{funcName:'SOF_SymDecryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid}
];
for (var i = 0; i < export_functions.length; i++) {
getImplmentFunction(export_functions[i]);
xtxsync[export_functions[i].funcName] = window[export_functions[i].funcName];
if (export_functions[i].aliasName) {
window[export_functions[i].aliasName] = window[export_functions[i].funcName];
xtxsync[export_functions[i].aliasName] = window[export_functions[i].funcName];
}
}
return true;
}
return initXTXAppObject(xtxsync);
})();
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// EXPORT VAR AND FUNCTIONS ///////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// const var
var CERT_TYPE_HARD = 1;
var CERT_TYPE_SOFT = 2;
var CERT_TYPE_ALL = 3;
// set auto logout parameters
function SetAutoLogoutParameter(strCertID, logoutFunc) {
xtxsync.custom.setAutoLogoutParameter(strCertID, logoutFunc);
}
// set user cert list id
function SetUserCertList(strListID, certType) {
xtxsync.custom.setUserCertList(strListID, certType);
}
// set custom usbkeychange callback
function SetOnUsbKeyChangeCallBack(callback) {
xtxsync.custom.setOnUsbKeyChangeCallBack(callback);
}
// set custom alert function
function SetAlertFunction(custom_alert) {
xtxsync.custom.setErrorReportFunc(custom_alert);
}
// get custom userlogin token
function GetLoginToken() {
return xtxsync.custom.getToken();
}
function SetLoginToken(tokenData) {
return xtxsync.custom.setToken(tokenData);
}
function GetUserListByType(strType) { // strType is 'HARD' or 'SOFT'
var strUserList = xtxsync.SOF_GetUserList();
var strReturn = "";
while (true) {
var i = strUserList.indexOf("&&&");
if (i <= 0 ) {
break;
}
var strOneUser = strUserList.substring(0, i);
var strName = strOneUser.substring(0, strOneUser.indexOf("||"));
var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length);
var devType = xtxsync.GetDeviceInfo(strCertID, 7);
if (devType == strType) {
strReturn += (strName + "||" + strCertID + "&&&");
}
var len = strUserList.length;
strUserList = strUserList.substring(i + 3, len);
};
return strReturn;
}
//get usbKey user list
function GetUserList_USBKey(cb, ctx) {
return GetUserListByType("HARD", cb, ctx);
}
//get soft user list
function GetUserList_Soft() {
return GetUserListByType("SOFT", cb, ctx);
}
//sign data with pkcs7 format
function SignByP7(strCertID, strInData, bDetach) {
return xtxsync.SOF_SignMessage(bDetach ? 1 : 0, strCertID, strInData);
}
//get symmitric key length
//because xtx and secxv2 secx default symmitric alg is no equal
function GetSymKeyLength() {
return 24;
}
//get device type return SOFT or HARD
function GetDeviceType(strCertID) {
return xtxsync.GetDeviceInfo(strCertID, 7);
}
// calculate file's hash
function HashFile(strFilePath) {
return xtxsync.SOF_HashFile(2/*sha1*/, strFilePath);
}
function ParseDateString(strDate) {
var strYear = strDate.substring(0, 4);
var strMonth = strDate.substring(4, 6);
var strDay = strDate.substring(6, 8);
var strHour = strDate.substring(8, 10);
var strMin = strDate.substring(10, 12);
var strSecond = strDate.substring(12, 14);
var RtnDate = new Date();
RtnDate.setFullYear(Number(strYear), Number(strMonth) - 1, Number(strDay));
RtnDate.setHours(Number(strHour));
RtnDate.setMinutes(Number(strMin));
RtnDate.setSeconds(Number(strSecond));
return RtnDate;
}
//Form login
function xtxLogin(formName, strCertID, strPin,strServerCert, strServerRan, strServerSignedData) {
var objForm = eval(formName);
if (objForm == null) {
return false;
}
if (strCertID == null || strCertID == "") {
xtxsync.custom.errorReportFunc("请输入证书密码!");
return false;
}
if (strPin == null || strPin == "") {
xtxsync.custom.errorReportFunc("请输入证书密码!");
return false;
}
//Add a hidden item ...
if (objForm.UserSignedData == null) {
objForm.insertAdjacentHTML("BeforeEnd", "<input type=\"hidden\" name=\"UserSignedData\" value=\"\">");
}
if (objForm.UserCert == null) {
objForm.insertAdjacentHTML("BeforeEnd", "<input type=\"hidden\" name=\"UserCert\" value=\"\">");
}
if (objForm.CertID == null) {
objForm.insertAdjacentHTML("BeforeEnd", "<input type=\"hidden\" name=\"CertID\" value=\"\">");
}
if (objForm.ContainerName == null) {
objForm.insertAdjacentHTML("BeforeEnd", "<input type=\"hidden\" name=\"ContainerName\" value=\"\">");
}
if (objForm.LoginToken == null) {
objForm.insertAdjacentHTML("BeforeEnd", "<input type=\"hidden\" name=\"LoginToken\" value=\"\">");
}
var bRet = xtxsync.SOF_Login(strCertID, strPin);
if (!bRet) {
var retryCount = xtxsync.SOF_GetPinRetryCount(strCertID);
if (retryCount > 0) {
xtxsync.custom.errorReportFunc("校验证书密码失败!您还有" + retryCount + "次机会重试!");
} else if (retryCount == 0) {
xtxsync.custom.errorReportFunc("您的证书密码已被锁死,请联系BJCA进行解锁!");
} else {
xtxsync.custom.errorReportFunc("登录失败!");
}
return false;
}
var strClientCert = xtxsync.SOF_ExportUserCert(strCertID);
if (strClientCert == "") {
xtxsync.custom.errorReportFunc("导出用户证书失败!");
return false;
}
var strNotBefore = xtxsync.SOF_GetCertInfo(strClientCert, 11);
var strNotAfter = xtxsync.SOF_GetCertInfo(strClientCert, 12);
var notBeforeDate = ParseDateString(strNotBefore);
var days = parseInt((notBeforeDate.getTime() - new Date().getTime()) / (1000*60*60*24));
if (days > 0) {
xtxsync.custom.errorReportFunc("您的证书尚未生效!距离生效日期还剩" + days + "天!");
return false;
}
var notAfterDate = ParseDateString(strNotAfter);
var milliseconds = notAfterDate.getTime() - new Date().getTime();
if (milliseconds < 0) {
xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!");
return false;
}
days = parseInt(milliseconds / (1000*60*60*24));
if (days > 0 && days <= 60) {
xtxsync.custom.errorReportFunc("您的证书还有" + days + "天过期\n请您尽快到北京数字证书认证中心办理证书更新手续");
} else if (days == 0) { // 证书有效期天数小于1天
var hours = parseInt(milliseconds / (1000*60*60));
if (hours > 0) {
xtxsync.custom.errorReportFunc("您的证书还有" + hours + "小时过期\n请您尽快到北京数字证书认证中心办理证书更新手续");
}
// 证书有效期小于1小时
var minutes = parseInt(milliseconds / (1000*60));
if (minutes > 1) {
xtxsync.custom.errorReportFunc("您的证书还有" + minutes + "分钟过期\n请您尽快到北京数字证书认证中心办理证书更新手续");
} else {
xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!");
return false;
}
}
bRet = xtxsync.SOF_VerifySignedData(strServerCert, strServerRan, strServerSignedData);
if (!bRet) {
xtxsync.custom.errorReportFunc("验证服务器端信息失败!");
return false;
}
var clientSignData = xtxsync.SOF_SignData(strCertID, strServerRan);
if (clientSignData == "") {
xtxsync.custom.errorReportFunc("客户端签名失败!");
return false;
}
objForm.CertID.value = strCertID;
objForm.ContainerName.value = strCertID;
objForm.UserCert.value = strClientCert;
objForm.UserSignedData.value = clientSignData;
objForm.LoginToken.value = xtxsync.custom.getToken();
return true;
}

@ -0,0 +1,3 @@
ENV = 'development'
VITE_APP_API = '/api/'
VITE_APP_FILE = 'http://yijiyuyue'

@ -0,0 +1,4 @@
ENV = 'production'
VITE_APP_API = 'https://yiji.yuluo.online/Laravel/public/api/'
VITE_APP_FILE = 'https://yiji.yuluo.online/Laravel/public/'

30
ZiZhuJi/.gitignore vendored

@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar"]
}

@ -0,0 +1,29 @@
# ZiZhuJi
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

@ -0,0 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,22 @@
{
"name": "zizhuji",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"axios": "^1.7.2",
"element-plus": "^2.7.5",
"vue": "^3.4.21",
"vue-router": "^4.3.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.4",
"vite": "^5.2.8"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1,72 @@
<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<RouterView />
</template>
<style scoped>
header {
line-height: 1.5;
max-height: 100vh;
}
.logo {
display: block;
margin: 0 auto 2rem;
}
nav {
width: 100%;
font-size: 12px;
text-align: center;
margin-top: 2rem;
}
nav a.router-link-exact-active {
color: var(--color-text);
}
nav a.router-link-exact-active:hover {
background-color: transparent;
}
nav a {
display: inline-block;
padding: 0 1rem;
border-left: 1px solid var(--color-border);
}
nav a:first-of-type {
border: 0;
}
@media (min-width: 1024px) {
header {
display: flex;
place-items: center;
padding-right: calc(var(--section-gap) / 2);
}
.logo {
margin: 0 2rem 0 0;
}
header .wrapper {
display: flex;
place-items: flex-start;
flex-wrap: wrap;
}
nav {
text-align: left;
margin-left: -1rem;
font-size: 1rem;
padding: 1rem 0;
margin-top: 1rem;
}
}
</style>

@ -0,0 +1,14 @@
import axios from '@/tools/axios.js'
//登录
export const Login = (data) => {
return axios({ url: import.meta.env.VITE_APP_API + 'H5/Login', data: data })
}
export const EntrustGetList = (data) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/H5/EntrustGetList', data: data })
}
export const GetEnablePlan = (data) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/H5/GetEnablePlan', data: data })
}
export const GetServiceDateTime = (data) => {
return axios({ url: import.meta.env.VITE_APP_API + 'GetServiceDateTime', data: data })
}

@ -0,0 +1,86 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
--vt-c-white: #ffffff;
--vt-c-white-soft: #f8f8f8;
--vt-c-white-mute: #f2f2f2;
--vt-c-black: #181818;
--vt-c-black-soft: #222222;
--vt-c-black-mute: #282828;
--vt-c-indigo: #2c3e50;
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
--vt-c-text-light-1: var(--vt-c-indigo);
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
--vt-c-text-dark-1: var(--vt-c-white);
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
--color-background: var(--vt-c-white);
--color-background-soft: var(--vt-c-white-soft);
--color-background-mute: var(--vt-c-white-mute);
--color-border: var(--vt-c-divider-light-2);
--color-border-hover: var(--vt-c-divider-light-1);
--color-heading: var(--vt-c-text-light-1);
--color-text: var(--vt-c-text-light-1);
--section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--vt-c-black);
--color-background-soft: var(--vt-c-black-soft);
--color-background-mute: var(--vt-c-black-mute);
--color-border: var(--vt-c-divider-dark-2);
--color-border-hover: var(--vt-c-divider-dark-1);
--color-heading: var(--vt-c-text-dark-1);
--color-text: var(--vt-c-text-dark-2);
}
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
font-weight: normal;
}
body {
min-height: 100vh;
color: var(--color-text);
background: var(--color-background);
transition:
color 0.5s,
background-color 0.5s;
line-height: 1.6;
font-family:
Inter,
-apple-system,
BlinkMacSystemFont,
'Segoe UI',
Roboto,
Oxygen,
Ubuntu,
Cantarell,
'Fira Sans',
'Droid Sans',
'Helvetica Neue',
sans-serif;
font-size: 15px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>

After

Width:  |  Height:  |  Size: 276 B

@ -0,0 +1,24 @@
@import './base.css';
#app {
width: 100%;
margin: 0;
padding: 0;
font-weight: normal;
height: 100vh;
}
a,
.green {
text-decoration: none;
color: hsla(160, 100%, 37%, 1);
transition: 0.4s;
padding: 3px;
}
@media (hover: hover) {
a:hover {
background-color: hsla(160, 100%, 37%, 0.2);
}
}

@ -0,0 +1,44 @@
<script setup>
defineProps({
msg: {
type: String,
required: true
}
})
</script>
<template>
<div class="greetings">
<h1 class="green">{{ msg }}</h1>
<h3>
Youve successfully created a project with
<a href="https://vitejs.dev/" target="_blank" rel="noopener">Vite</a> +
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>.
</h3>
</div>
</template>
<style scoped>
h1 {
font-weight: 500;
font-size: 2.6rem;
position: relative;
top: -10px;
}
h3 {
font-size: 1.2rem;
}
.greetings h1,
.greetings h3 {
text-align: center;
}
@media (min-width: 1024px) {
.greetings h1,
.greetings h3 {
text-align: left;
}
}
</style>

@ -0,0 +1,88 @@
<script setup>
import WelcomeItem from './WelcomeItem.vue'
import DocumentationIcon from './icons/IconDocumentation.vue'
import ToolingIcon from './icons/IconTooling.vue'
import EcosystemIcon from './icons/IconEcosystem.vue'
import CommunityIcon from './icons/IconCommunity.vue'
import SupportIcon from './icons/IconSupport.vue'
</script>
<template>
<WelcomeItem>
<template #icon>
<DocumentationIcon />
</template>
<template #heading>Documentation</template>
Vues
<a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a>
provides you with all information you need to get started.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<ToolingIcon />
</template>
<template #heading>Tooling</template>
This project is served and bundled with
<a href="https://vitejs.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The
recommended IDE setup is
<a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a> +
<a href="https://github.com/johnsoncodehk/volar" target="_blank" rel="noopener">Volar</a>. If
you need to test your components and web pages, check out
<a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a> and
<a href="https://on.cypress.io/component" target="_blank" rel="noopener"
>Cypress Component Testing</a
>.
<br />
More instructions are available in <code>README.md</code>.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<EcosystemIcon />
</template>
<template #heading>Ecosystem</template>
Get official tools and libraries for your project:
<a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>,
<a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>,
<a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and
<a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If
you need more resources, we suggest paying
<a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a>
a visit.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<CommunityIcon />
</template>
<template #heading>Community</template>
Got stuck? Ask your question on
<a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>, our official
Discord server, or
<a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener"
>StackOverflow</a
>. You should also subscribe to
<a href="https://news.vuejs.org" target="_blank" rel="noopener">our mailing list</a> and follow
the official
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener">@vuejs</a>
twitter account for latest news in the Vue world.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<SupportIcon />
</template>
<template #heading>Support Vue</template>
As an independent project, Vue relies on community backing for its sustainability. You can help
us by
<a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>.
</WelcomeItem>
</template>

@ -0,0 +1,86 @@
<template>
<div class="item">
<i>
<slot name="icon"></slot>
</i>
<div class="details">
<h3>
<slot name="heading"></slot>
</h3>
<slot></slot>
</div>
</div>
</template>
<style scoped>
.item {
margin-top: 2rem;
display: flex;
position: relative;
}
.details {
flex: 1;
margin-left: 1rem;
}
i {
display: flex;
place-items: center;
place-content: center;
width: 32px;
height: 32px;
color: var(--color-text);
}
h3 {
font-size: 1.2rem;
font-weight: 500;
margin-bottom: 0.4rem;
color: var(--color-heading);
}
@media (min-width: 1024px) {
.item {
margin-top: 0;
padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
}
i {
top: calc(50% - 25px);
left: -26px;
position: absolute;
border: 1px solid var(--color-border);
background: var(--color-background);
border-radius: 8px;
width: 50px;
height: 50px;
}
.item:before {
content: ' ';
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
bottom: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:after {
content: ' ';
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
top: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:first-of-type:before {
display: none;
}
.item:last-of-type:after {
display: none;
}
}
</style>

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
/>
</svg>
</template>

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
<path
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
/>
</svg>
</template>

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
<path
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
/>
</svg>
</template>

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
/>
</svg>
</template>

@ -0,0 +1,19 @@
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
role="img"
class="iconify iconify--mdi"
width="24"
height="24"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 24 24"
>
<path
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
fill="currentColor"
></path>
</svg>
</template>

@ -0,0 +1,20 @@
import './assets/main.css'
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import App from './App.vue'
import router from './router'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.use(ElementPlus, {
locale: zhCn,
})
app.use(router)
app.mount('#app')

@ -0,0 +1,38 @@
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/about',
name: 'about',
// route level code-splitting
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import('../views/AboutView.vue')
},
{
path: '/login',
name: 'Login',
component: () => import('../views/Login.vue')
},
{
path: '/index',
name: 'Index',
component: () => import('../views/Index.vue')
},
{
path: '/checkitemmainlist',
name: 'CheckItemMainList',
component: () => import('../views/CheckItemMainList.vue')
}
]
})
export default router

@ -0,0 +1,3 @@
export function ToUrl(url){
window.location.href=url
}

@ -0,0 +1,117 @@
import axios from 'axios'
//请求拦截器
axios.interceptors.request.use(
config => {
config.headers.Authorization = 'Bearer ' + sessionStorage.getItem("token")
config.method = 'POST'
return config
},
err => {
return Promise.reject(error)
}
)
//响应拦截器
axios.interceptors.response.use(
async response => {
const res = response.data
console.log(response)
if (res.code !== 200) {
if (res.code == 10001) { //token验证出错
window.location.href = "./#/login"
}
if (res.code == 10002) { //token验证超时
//console.log(response.config);
var ss = ''
await TokenRefresh().then(async data => {
// // 使用最外层请求的返回值
// //console.log(data)
if (data == false) {
window.location.href = "./#/login"
}
if (data == true) {
// console.log("刷新成功");
ss = await axios(response.config)
// console.log("再次支持上此操作");
}
}).catch(error => {
console.log(error);
});
//await TT();
return ss
//console.log('我是后面的');
}
if (res.code == 10003) { //无访问此接口权限
ElMessageBox.confirm(
'无权限',
'通知', {
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
type: 'warning',
showCancelButton: false,
showClose: false,
}
)
.then(() => {
// window.location.href = "/#/login"
})
.catch(() => {
})
return false
}
return Promise.reject(res.msg || 'Error').catch(err => {
console.log(err)
})
} else { //成功返回数据
return res
}
},
error => {
return Promise.reject(error)
}
)
const instance = axios.create({
// 其他配置项
// ...
// 禁用请求拦截器
interceptors: false
});
function TokenRefresh() {
console.log("执行TokenRefresh")
return new Promise((resolve, reject) => {
instance({
method: 'post',
url: import.meta.env.VITE_APP_API + 'tokenRefresh',
headers: {
Authorization: 'Bearer ' + sessionStorage.getItem("refreshToken")
},
data: {}
}).then(function(res) {
// console.log('获取到新token');
if (res.data.status) {
sessionStorage.setItem('token', res.data.token);
sessionStorage.setItem('refreshToken', res.data.refresh_token);
resolve(true);
} else {
resolve(false);
}
});
})
}
export default axios

@ -0,0 +1,15 @@
<template>
<div class="about">
<h1>This is an about page</h1>
</div>
</template>
<style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>

@ -0,0 +1,192 @@
<template>
<div class="CheckItemMain">
<div class="userInfo">
<div style="font-size: 20px; font-weight: 700; color: #fff;"><el-icon><Avatar /></el-icon> </div>
<div class="userInfo1">
<div>姓名<span>张XX</span></div>
<div>性别<span></span></div>
<div>电话<span>19999999999</span></div>
<div>登记号<span>002000022</span></div>
</div>
<div class="date">
<el-date-picker size="large" style="width: 100%; border-radius: 20px;height: 60px;" v-model="searchInfo.dateRange"
type="daterange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"
value-format="YYYY-MM-DD" />
</div>
</div>
<div class="list">
<div class="info" v-for="(item,index) in list" :key="index">
<div class="entrust_title"><div>检查项目{{item.entrust}}</div>
<div v-if="item.list_status==0" class="tips"></div>
<div v-if="item.list_status==1" class="tips" style="color: #4edb5a;"></div>
<div v-if="item.list_status==2" class="tips" style="color: #4edb5a;"></div>
<div v-if="item.list_status==3" class="tips" style="color: #ccc;"></div>
</div>
<div class="iteminfo">
<div style="height: 60px;line-height: 60px;font-size: 20px;" >医嘱时间{{item.entrust_date}} 申请科室{{item.reservation_department}} </div>
<el-button v-if="item.list_status==0" type="success" size="large" class="button dian" >开始预约</el-button>
<div v-if="item.list_status==1">
<el-button type="success" size="large" class="button red" >取消</el-button>
<el-button type="success" size="large" class="button blue" >改约</el-button>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import {
EntrustGetList,GetServiceDateTime
} from "@/api/api.js";
import {
ElMessage
} from 'element-plus'
import {
ref,nextTick,onMounted
} from 'vue'
let searchInfo=ref({
dateRange:[]
})
//
const GetServiceDate = () => {
GetServiceDateTime().then(res => {
if (res.status) {
let datetime = res.data.datetime.substr(0, 10)
let date_l_n=getDatesAroundSameDay(datetime)
searchInfo.value.dateRange = [date_l_n.previousMonth, date_l_n.nextMonth]
Getlist()
}
})
}
let list=ref(null);
const Getlist=()=>{
EntrustGetList({searchInfo:searchInfo.value}).then(res=>{
list.value=res.data.list;
})
}
onMounted(()=>{
GetServiceDate();
})
function getDatesAroundSameDay(givenDateString) {
// Date
const givenDate = new Date(givenDateString);
//
const thisMonth = givenDate.getMonth();
//
const prevMonth = new Date(givenDate.getFullYear(), thisMonth, givenDate.getDate());
prevMonth.setMonth(thisMonth - 1);
const nextMonth = new Date(givenDate.getFullYear(), thisMonth, givenDate.getDate());
nextMonth.setMonth(thisMonth + 1);
//
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
//
return {
previousMonth: formatDate(prevMonth),
nextMonth: formatDate(nextMonth)
};
}
</script>
<style scoped>
.CheckItemMain{
height: calc(100vh ) ;
background-color: #eef7fa;
padding-top: 30px;
}
.userInfo{
border:1px solid #ccc;
border-radius: 4px;
padding: 20px;
background-color: #33cdc9;
margin-bottom: 50px;
}
.userInfo1{
display: flex;
justify-content: space-around;
color:#fff;
}
.userInfo1 span{
font-size: 22px;
}
.date{
padding: 8px;
text-align: center;
width: 50%;
margin-top: 16px;
transform: translate(50% ,55px );
}
.list{
padding: 0px 20px 20px 20px;
}
.info{
border: 1px solid #33cdc9;
border-radius: 16px;
margin-top: 16px;
background-color: #fff;
}
.entrust_title{
color: #666;
font-size: 18px;
background-color: #33cdc9;
border-bottom: 1px solid #ccc;
display: flex;
justify-content: space-between;
padding-top: 8px;
padding-right: 20px;
padding-left: 20px;
padding-bottom: 8px;
color: #fff;
border-radius: 16px 16px 0 0 ;
}
.iteminfo{
padding: 18px;
display: flex;
justify-content: space-between;
justify-items: center;
}
.tips{
background-color: #fff ;
border-radius: 15px;
color: #33cdc9;
width: 150px;
height: 30px;
line-height: 30px;
text-align: center;
font-size: 18px;
font-weight: 700;
}
.button{
font-size: 18px;width:150px;height: 60px;border: 0px;
}
.dian{
background-color: #33cdc9;
}
.red{
background-color: coral;
}
.blue{
background-color: #39a6cd;
}
</style>

@ -0,0 +1,9 @@
<script setup>
import TheWelcome from '../components/TheWelcome.vue'
</script>
<template>
<main>
<TheWelcome />
</main>
</template>

@ -0,0 +1,86 @@
<template>
<div class="Indexmain">
<div class="header">自助预约服务平台</div>
<div class="body1">
<div class="row">
<div class="yuyue" @click="goto('checkitemmainlist')">
<el-icon size="60" color="#fff">
<Clock/>
</el-icon>
<div> </div>
</div>
<div class="baodao">
<el-icon size="60" color="#fff">
<Coordinate/>
</el-icon>
<div> </div>
</div>
</div>
</div>
</div>
</template>
<script setup>
const goto=(url)=>{
window.location.href="./#/"+url;
}
</script>
<style scoped>
.Indexmain {
height: 100%;
display: flex;
flex-direction: column;
}
.header {
width: 100%;
background-color: #317bc8;
color: #fff;
font-size: 28px;
text-align: center;
padding: 20px;
}
.body1 {
padding: 50px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.row {
display: flex;
justify-content: space-around;
width: 100%;
}
.yuyue {
background-color: #4cd07f;
width: 48%;
text-align: center;
height: 300px;
width: 500px;
color: #fff;
font-size: 20px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.baodao {
background-color: #35a3d9;
width: 500px;
text-align: center;
color: #fff;
font-size: 20px;
height: 300px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
</style>

@ -0,0 +1,39 @@
<template>
<div>
登录
</div>
</template>
<script setup>
import {
Login
} from "@/api/api.js";
import {
ElMessage
} from 'element-plus'
import {
ref,nextTick,onMounted
} from 'vue'
const login=()=>{
Login().then(res=>{
console.log(res)
if(res.status){
sessionStorage.setItem('token', res.data.token);
sessionStorage.setItem('refreshToken', res.data.refresh_token);
var token = sessionStorage.getItem('token');
if (token == res.data.token) {
window.location.href="./#/index"
}
}else{
ElMessage.error(res.data.msg)
}
})
}
onMounted(() => {
login()
})
</script>
<style scoped>
</style>

@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>

@ -0,0 +1,27 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
server: {
host: "0.0.0.0",
port: 5174,
proxy: {
'/api': {
target: 'http://yijiyuyue/api', // 实际的API服务器地址
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '') // 如果API地址有前缀可以进行转写
}
}
}
})
Loading…
Cancel
Save