Commit 61e05c2e75bd0f5d277ab14cfd2c1954f22baed4

Authored by 阿宝
1 parent 560c12f2

软件下载

E/system-commandline-sentinel-files/dotnet-suggest-registration-git-credential-manager-core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null 0 → 100644
  1 +Exception during registration:
  2 +System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
  3 + 在 System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
  4 + 在 System.Diagnostics.Process.Start()
  5 + 在 System.CommandLine.Invocation.Process.StartProcess(String command, String args, String workingDir, Action`1 stdOut, Action`1 stdErr, ValueTuple`2[] environmentVariables)
  6 + 在 System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__10_1>d.MoveNext()
0 \ No newline at end of file 7 \ No newline at end of file
src/views/down/client.vue
@@ -8,9 +8,9 @@ @@ -8,9 +8,9 @@
8 <div class="page-content"> 8 <div class="page-content">
9 <div class="content-top"> 9 <div class="content-top">
10 <div class="cont-info"> 10 <div class="cont-info">
11 - <img class="logo" :src="info.appImage" alt="" /> 11 + <img v-if="info.appImage" class="logo" :src="info.appImage" alt="" />
12 <div> 12 <div>
13 - <p class="name">{{ `${info.appName} ${info.versionName}` }}</p> 13 + <p class="name">{{ `${info.appName||""} ${info.versionName||""}` }}</p>
14 <p class="txt">文件大小:{{ `${info.fileSize}` }}M</p> 14 <p class="txt">文件大小:{{ `${info.fileSize}` }}M</p>
15 <p class="txt">最近更新:{{ info.modifiedTime }}</p> 15 <p class="txt">最近更新:{{ info.modifiedTime }}</p>
16 </div> 16 </div>
@@ -27,14 +27,20 @@ @@ -27,14 +27,20 @@
27 </div> 27 </div>
28 <ul class="down-ul"> 28 <ul class="down-ul">
29 <li class="down-li" v-for="item in tableData" :key="item.id"> 29 <li class="down-li" v-for="item in tableData" :key="item.id">
30 - <span @click="edit(item)">{{ item.configName }}</span> 30 + <span @click="setConfigForm(item)">{{ item.configName }}</span>
31 <el-button plan round @click="getAppDownloadUrl(item.id)" 31 <el-button plan round @click="getAppDownloadUrl(item.id)"
32 >下载</el-button 32 >下载</el-button
33 > 33 >
34 </li> 34 </li>
35 <li class="down-li"> 35 <li class="down-li">
36 <span>自定义软件功能</span> 36 <span>自定义软件功能</span>
37 - <el-button plan round icon="el-icon-plus">参数设置</el-button> 37 + <el-button
  38 + plan
  39 + round
  40 + icon="el-icon-plus"
  41 + @click="setDefaultForm(), (dialogVis = true), (type = 1)"
  42 + >参数设置</el-button
  43 + >
38 </li> 44 </li>
39 </ul> 45 </ul>
40 </div> 46 </div>
@@ -46,7 +52,15 @@ @@ -46,7 +52,15 @@
46 </div> 52 </div>
47 </div> 53 </div>
48 <div class="form-box"> 54 <div class="form-box">
49 - <el-form :model="formData" :rules="ruleForm" label-width="160px"> 55 + <el-form :model="formData" :rules="ruleForm" label-width="180px">
  56 + <el-form-item label="主菜单设置:" prop="configName" v-if="type==1">
  57 + <el-col :span="12">
  58 + <el-input
  59 + v-model.trim="formData.configName"
  60 + placeholder="请填写配置名称"
  61 + ></el-input>
  62 + </el-col>
  63 + </el-form-item>
50 <el-form-item label="主菜单设置:" prop="mainMenu"> 64 <el-form-item label="主菜单设置:" prop="mainMenu">
51 <el-checkbox-group v-model="formData.mainMenu" :max="4"> 65 <el-checkbox-group v-model="formData.mainMenu" :max="4">
52 <el-checkbox v-for="item in menuList" :label="item" :key="item">{{ 66 <el-checkbox v-for="item in menuList" :label="item" :key="item">{{
@@ -72,26 +86,64 @@ @@ -72,26 +86,64 @@
72 </el-form-item> 86 </el-form-item>
73 <el-form-item label="成绩等级设置:"> 87 <el-form-item label="成绩等级设置:">
74 <el-col :span="12"> 88 <el-col :span="12">
75 - <p class="silde-p">  
76 - <el-slider v-model="formData.failedSet"></el-slider  
77 - ><span>不及格</span>  
78 - </p>  
79 - <p class="silde-p">  
80 - <el-slider v-model="formData.passSet"></el-slider  
81 - ><span>及格</span>  
82 - </p>  
83 - <p class="silde-p">  
84 - <el-slider v-model="formData.goodSet"></el-slider  
85 - ><span>良好</span>  
86 - </p>  
87 - <p class="silde-p">  
88 - <el-slider v-model="formData.excellenSet"></el-slider  
89 - ><span>优秀</span>  
90 - </p> 89 + <div class="silde-box">
  90 + <p class="silde-p">
  91 + <span class="num" :style="{ left: formData.failedSet + '%' }"
  92 + >{{ formData.failedSet }}%</span
  93 + >
  94 + <el-slider
  95 + v-model="formData.failedSet"
  96 + :show-tooltip="false"
  97 + ></el-slider
  98 + ><span class="txt" :style="{ left: formData.failedSet + '%' }"
  99 + >不及格</span
  100 + >
  101 + </p>
  102 + <p class="silde-p">
  103 + <span class="num" :style="{ left: formData.passSet + '%' }"
  104 + >{{ formData.passSet }}%</span
  105 + >
  106 + <el-slider
  107 + v-model="formData.passSet"
  108 + :show-tooltip="false"
  109 + ></el-slider
  110 + ><span class="txt" :style="{ left: formData.passSet + '%' }"
  111 + >及格</span
  112 + >
  113 + </p>
  114 + <p class="silde-p">
  115 + <span class="num" :style="{ left: formData.goodSet + '%' }"
  116 + >{{ formData.goodSet }}%</span
  117 + >
  118 + <el-slider
  119 + v-model="formData.goodSet"
  120 + :show-tooltip="false"
  121 + ></el-slider
  122 + ><span class="txt" :style="{ left: formData.goodSet + '%' }"
  123 + >良好</span
  124 + >
  125 + </p>
  126 + <p class="silde-p">
  127 + <span
  128 + class="num"
  129 + :style="{ left: formData.excellenSet + '%' }"
  130 + >{{ formData.excellenSet }}%</span
  131 + >
  132 + <el-slider
  133 + v-model="formData.excellenSet"
  134 + :show-tooltip="false"
  135 + ></el-slider
  136 + ><span
  137 + class="txt"
  138 + :style="{ left: formData.excellenSet + '%' }"
  139 + >优秀</span
  140 + >
  141 + </p>
  142 + </div>
91 </el-col> 143 </el-col>
92 </el-form-item> 144 </el-form-item>
93 <el-form-item label="抢答设置:" prop="viesAnswerSet"> 145 <el-form-item label="抢答设置:" prop="viesAnswerSet">
94 - <el-radio-group v-model="formData.popupMenu"> 146 + <el-radio-group v-model="formData.viesAnswerSet">
95 <el-radio :label="0">倒计时抢答</el-radio> 147 <el-radio :label="0">倒计时抢答</el-radio>
96 <el-radio :label="1">即时抢答</el-radio> 148 <el-radio :label="1">即时抢答</el-radio>
97 <el-radio :label="2">老师选择</el-radio> 149 <el-radio :label="2">老师选择</el-radio>
@@ -105,12 +157,100 @@ @@ -105,12 +157,100 @@
105 ></el-input-number 157 ></el-input-number
106 >秒 158 >秒
107 </el-form-item> 159 </el-form-item>
108 - <el-form-item label="抽答设置:" prop="viesAnswerSet"> 160 + <el-form-item label="抽答设置:" prop="ballotAnswerSet">
109 <el-radio-group v-model="formData.ballotAnswerSet"> 161 <el-radio-group v-model="formData.ballotAnswerSet">
110 <el-radio :label="0">点名抽答</el-radio> 162 <el-radio :label="0">点名抽答</el-radio>
111 <el-radio :label="1">随机抽答</el-radio> 163 <el-radio :label="1">随机抽答</el-radio>
112 </el-radio-group> 164 </el-radio-group>
113 </el-form-item> 165 </el-form-item>
  166 + <el-form-item label="单选题选项默认个数:" prop="singleChoiceNum">
  167 + <el-input-number
  168 + size="small"
  169 + class="count-down count-down2"
  170 + v-model="formData.singleChoiceNum"
  171 + :min="2"
  172 + :max="7"
  173 + :step="1"
  174 + :step-strictly="true"
  175 + ></el-input-number
  176 + >个
  177 + </el-form-item>
  178 + <el-form-item label="多选题选项默认个数:" prop="countdown">
  179 + <el-input-number
  180 + size="small"
  181 + class="count-down count-down2"
  182 + v-model="formData.countdown"
  183 + :min="2"
  184 + :max="7"
  185 + :step="1"
  186 + :step-strictly="true"
  187 + ></el-input-number
  188 + >个
  189 + </el-form-item>
  190 + <el-form-item label="测—单题型默认题数:" prop="singleTypeNum">
  191 + <el-input-number
  192 + size="small"
  193 + class="count-down count-down2"
  194 + v-model="formData.singleTypeNum"
  195 + :min="1"
  196 + :max="100"
  197 + :step="1"
  198 + :step-strictly="true"
  199 + ></el-input-number
  200 + >个
  201 + </el-form-item>
  202 + <el-form-item label="问—倒计时:" prop="askCountdown">
  203 + <el-switch v-model="askCount" @change="askCountChange"> </el-switch>
  204 + <el-input-number
  205 + v-show="askCount"
  206 + size="small"
  207 + class="count-down"
  208 + v-model="formData.askCountdown"
  209 + :min="0"
  210 + :step="1"
  211 + :step-strictly="true"
  212 + ></el-input-number>
  213 + {{ askCount ? "秒" : "" }}
  214 + </el-form-item>
  215 + <el-form-item label="测—倒计时:" prop="viesAnswerSet">
  216 + <el-switch v-model="examsDuration" @change="examsDurationChange">
  217 + </el-switch>
  218 + <el-input-number
  219 + v-show="examsDuration"
  220 + size="small"
  221 + class="count-down"
  222 + v-model="formData.examsDuration"
  223 + :min="0"
  224 + :step="1"
  225 + :step-strictly="true"
  226 + ></el-input-number>
  227 + {{ examsDuration ? "秒" : "" }}
  228 + </el-form-item>
  229 + <el-form-item label="答题结构展示:" prop="displayModel">
  230 + <el-radio-group v-model="formData.displayModel">
  231 + <el-radio :label="0">极简模式</el-radio>
  232 + <el-radio :label="1">全屏模式</el-radio>
  233 + </el-radio-group>
  234 + </el-form-item>
  235 + <el-form-item label="语言设置:" prop="languageSet">
  236 + <el-radio-group v-model="formData.languageSet">
  237 + <el-radio :label="0">中文</el-radio>
  238 + <el-radio :label="1">英文</el-radio>
  239 + </el-radio-group>
  240 + </el-form-item>
  241 + <el-form-item label="其他设置:">
  242 + <el-checkbox-group v-model="formData.otherSet">
  243 + <p>
  244 + <el-checkbox :label="0">答题结束自动显示答题统计</el-checkbox>
  245 + </p>
  246 + <p><el-checkbox :label="1">答题结束自动保存截屏</el-checkbox></p>
  247 + </el-checkbox-group>
  248 + </el-form-item>
  249 + <el-form-item label=" ">
  250 + <el-button type="primary" round @click="saveForm">保存</el-button>
  251 + <el-button round @click="setDefaultForm">恢复默认设置</el-button>
  252 + <el-button round @click="dialogVis = false">取消</el-button>
  253 + </el-form-item>
114 </el-form> 254 </el-form>
115 </div> 255 </div>
116 </div> 256 </div>
@@ -118,11 +258,44 @@ @@ -118,11 +258,44 @@
118 </template> 258 </template>
119 259
120 <script> 260 <script>
  261 +const defaultForm = {
  262 + configName: "",
  263 + mainMenu: ["问"],
  264 + popupMenu: 1,
  265 + failedSet: 60,
  266 + passSet: 80,
  267 + goodSet: 90,
  268 + excellenSet: 98,
  269 + viesAnswerSet: 0,
  270 + countdown: 5,
  271 + ballotAnswerSet: 0,
  272 + singleChoiceNum: 4,
  273 + multipleChoiceNum: 4,
  274 + singleTypeNum: 20,
  275 + askCountdown: 30,
  276 + examsDuration: 5400,
  277 + displayModel: 0,
  278 + languageSet: 0,
  279 + otherSet: [],
  280 +};
121 export default { 281 export default {
  282 + watch: {
  283 + "formData.askCountdown": function (val) {
  284 + if (val == 0) {
  285 + this.askCount = false;
  286 + }
  287 + },
  288 + "formData.examsDuration": function (val) {
  289 + if (val == 0) {
  290 + this.examsDuration = false;
  291 + }
  292 + },
  293 + },
122 data() { 294 data() {
123 return { 295 return {
124 page: 1, 296 page: 1,
125 size: 20, 297 size: 20,
  298 + type: 1, //1-添加;2-修改
126 info: { 299 info: {
127 appName: "", 300 appName: "",
128 appImage: "", 301 appImage: "",
@@ -131,8 +304,12 @@ export default { @@ -131,8 +304,12 @@ export default {
131 modifiedTime: "", 304 modifiedTime: "",
132 }, 305 },
133 tableData: [], 306 tableData: [],
134 - dialogVis: true, 307 + dialogVis: false,
  308 + askCount: true,
  309 + examsDuration: true,
  310 + configId:'',
135 formData: { 311 formData: {
  312 + configName: "",
136 mainMenu: ["问"], 313 mainMenu: ["问"],
137 popupMenu: 1, 314 popupMenu: 1,
138 failedSet: 60, 315 failedSet: 60,
@@ -142,8 +319,19 @@ export default { @@ -142,8 +319,19 @@ export default {
142 viesAnswerSet: 0, 319 viesAnswerSet: 0,
143 countdown: 5, 320 countdown: 5,
144 ballotAnswerSet: 0, 321 ballotAnswerSet: 0,
  322 + singleChoiceNum: 4,
  323 + multipleChoiceNum: 4,
  324 + singleTypeNum: 20,
  325 + askCountdown: 30,
  326 + examsDuration: 5400,
  327 + displayModel: 0,
  328 + languageSet: 0,
  329 + otherSet: [],
145 }, 330 },
146 ruleForm: { 331 ruleForm: {
  332 + configName: [
  333 + { required: true, message: "请填写配置名称", trigger: "blur" },
  334 + ],
147 mainMenu: [ 335 mainMenu: [
148 { required: true, message: "请选择主菜单", trigger: "blur" }, 336 { required: true, message: "请选择主菜单", trigger: "blur" },
149 ], 337 ],
@@ -159,6 +347,41 @@ export default { @@ -159,6 +347,41 @@ export default {
159 ballotAnswerSet: [ 347 ballotAnswerSet: [
160 { required: true, message: "请选择抽答类型", trigger: "blur" }, 348 { required: true, message: "请选择抽答类型", trigger: "blur" },
161 ], 349 ],
  350 + singleChoiceNum: [
  351 + {
  352 + required: true,
  353 + message: "请输入单选题选项默认个数",
  354 + trigger: "blur",
  355 + },
  356 + ],
  357 + multipleChoiceNum: [
  358 + {
  359 + required: true,
  360 + message: "请输入多选题选项默认个数",
  361 + trigger: "blur",
  362 + },
  363 + ],
  364 + singleTypeNum: [
  365 + {
  366 + required: true,
  367 + message: "请输入测—单题型默认题数",
  368 + trigger: "blur",
  369 + },
  370 + ],
  371 + displayModel: [
  372 + {
  373 + required: true,
  374 + message: "请选择答题结构",
  375 + trigger: "blur",
  376 + },
  377 + ],
  378 + languageSet: [
  379 + {
  380 + required: true,
  381 + message: "请选择语言",
  382 + trigger: "blur",
  383 + },
  384 + ],
162 }, 385 },
163 menuList: ["问", "测", "析"], 386 menuList: ["问", "测", "析"],
164 }; 387 };
@@ -168,6 +391,81 @@ export default { @@ -168,6 +391,81 @@ export default {
168 this.appConfigList(); 391 this.appConfigList();
169 }, 392 },
170 methods: { 393 methods: {
  394 + setConfigForm(obj) {
  395 + let content = JSON.parse(obj.content)
  396 + console.log(content)
  397 + for (let key in this.formData) {
  398 + content[key] ? (this.formData[key] = content[key]) : "";
  399 + }
  400 + this.type = 2;
  401 + this.configId = obj.id,
  402 + this.dialogVis=true
  403 + },
  404 + setDefaultForm() {
  405 + for (let key in this.formData) {
  406 + this.formData[key] = defaultForm[key];
  407 + }
  408 + },
  409 + askCountChange(val) {
  410 + if (val) {
  411 + this.formData.askCountdown = 30;
  412 + } else {
  413 + this.formData.askCountdown = 0;
  414 + }
  415 + },
  416 + examsDurationChange(val) {
  417 + if (val) {
  418 + this.formData.examsDuration = 5400;
  419 + } else {
  420 + this.formData.examsDuration = 0;
  421 + }
  422 + },
  423 + async saveForm() {
  424 + let content = {};
  425 + for (let key in this.formData) {
  426 + if (key != "configName") {
  427 + content[key] = this.formData[key];
  428 + }
  429 + }
  430 +
  431 + if (this.type == 1) {
  432 + this.addAppConfig({
  433 + configName: this.formData.configName,
  434 + content: { ...content },
  435 + });
  436 + } else {
  437 + this.updateAppConfig({
  438 + configId: this.configId,
  439 + content: { ...content },
  440 + });
  441 + }
  442 + },
  443 +
  444 + async addAppConfig(params) {
  445 + const { data, status, info } = await this.$request.addAppConfig({
  446 + ...params,
  447 + });
  448 + if (status == 0) {
  449 + this.$message.success("配置成功");
  450 + this.dialogVis = false;
  451 + this.appConfigList();
  452 + } else {
  453 + this.$message.error(info);
  454 + }
  455 + },
  456 + async updateAppConfig(params) {
  457 + const { data, status, info } = await this.$request.updateAppConfig({
  458 + ...params,
  459 + });
  460 + if (status == 0) {
  461 + this.$message.success("配置成功");
  462 + this.dialogVis = false;
  463 + this.appConfigList();
  464 + } else {
  465 + this.$message.error(info);
  466 + }
  467 + },
  468 +
171 async latestVersion() { 469 async latestVersion() {
172 const { data, status, info } = await this.$request.latestVersion(); 470 const { data, status, info } = await this.$request.latestVersion();
173 if (status == 0) { 471 if (status == 0) {
@@ -337,21 +635,42 @@ export default { @@ -337,21 +635,42 @@ export default {
337 display: none; 635 display: none;
338 } 636 }
339 } 637 }
340 - .silde-p {  
341 - display: flex;  
342 - align-items: center;  
343 - height:36px;  
344 - line-height:36px;  
345 - & > span {  
346 - width: 48px;  
347 - margin-left: 10px;  
348 - flex-shrink: 0;  
349 - }  
350 - :deep(.el-slider) {  
351 - flex: 1;  
352 - }  
353 - :deep(.el-slider__runway) {  
354 - margin:5px 0; 638 + .count-down2 {
  639 + margin-left: 0;
  640 + }
  641 + .silde-box {
  642 + position: relative;
  643 + width: 100%;
  644 + height: 60px;
  645 + .silde-p {
  646 + width: 100%;
  647 + position: absolute;
  648 + padding-top: 20px;
  649 + & > span {
  650 + position: absolute;
  651 + width: 48px;
  652 + text-align: center;
  653 + line-height: 18px;
  654 + flex-shrink: 0;
  655 + font-size: 12px;
  656 + }
  657 + :deep(.el-slider) {
  658 + flex: 1;
  659 + }
  660 + :deep(.el-slider__runway) {
  661 + margin: 5px 0;
  662 + }
  663 + :deep(.el-slider__runway) {
  664 + background-color: #409eff;
  665 + }
  666 + .num {
  667 + top: 0;
  668 + transform: translateX(-24px);
  669 + }
  670 + .txt {
  671 + bottom: -20px;
  672 + transform: translateX(-24px);
  673 + }
355 } 674 }
356 } 675 }
357 } 676 }